2012-07-11 10 views
8

Używam Hibernate Validator 4.2.0.Final i szukam najprostszy sposób, aby dołączyć nazwę pola klasy w moim komunikacie o błędzie.Dołącz nazwę pola wewnątrz komunikatu o błędzie za pomocą Hibernuj Validator

Co znalazłem to następujący wątek Using a custom ResourceBundle with Hibernate Validator. Zgodnie z tym, powinienem utworzyć moją własną adnotację dla każdej adnotacji ograniczenia, dodając jedną właściwość do każdej z nich.

Czy istnieje lepszy sposób osiągnięcia tego celu?

Poniższy kod:

@Size(max = 5) 
private String myField; 

produkuje domyślny błąd: rozmiar musi być pomiędzy 0 i 5.

chciałbym go mieć: rozmiar myField musi być między 0 i 5.

Z góry dziękuję.

Odpowiedz

0

Dla wszystkich osób, które szukają sposobu na dostęp do klasy w walidatorze. Umieszczanie adnotacji hibernacji na poziomie klasy zamiast na poziomie zmiennym zapewnia dostęp do obiektu klasy (zakładając, że zdefiniowałeś własny weryfikator).

public class myCustomValidator implements ContraintValidator <MyAnnotation, MyAnnotatedClass> { 

    public void initialize (...){ ... }; 

    public boolean isValid (MyAnnotatedClass myAnnotatedClass) { 

     // access to elements of your myAnnotatedClass 

    } 
} 
2

Nie znam żadnej ogólnej metody, ale można zdefiniować niestandardowy komunikat o błędzie i podać w nim nazwę pola.

@Size(max = 5, message = "myField size must be between 0 and 5") 
private String myField; 
+2

Nie umiędzynarodowienie ten sposób. – dbreaux

0

użycie oval ten posiada dużą liczbę adnotacji oraz możliwych sposobów, aby wyświetlać wiadomości.

14

można uzyskać nazwę pola z metodą z ConstraintViolation classgetPropertyPath().

Dobrym domyślny komunikat o błędzie może być:

violation.getPropertyPath() + " " + violation.getMessage(); 

która daje „foo nie może być zerowa” lub „foo.bar nie może być null” w przypadku zagnieżdżonych obiektów.

+0

to było dla mnie idealne bro. dzięki. –

+0

To jest typowy wzór użycia. – okwap

+0

Jak uzyskać konkretną nazwę pola – DEADEND

0

umieścić każdą wiadomość walidacji pola w pliku właściwości, na przykład:

field.student.name.size.message = Student name size is not valid. 

i fasoli, należy ją tak:

@Size(max = 5, message = "${field.student.name.size.message}") 
private String myField; 

wiem, że to nie jest idealny rozwiązanie, ale też nie znajduję lepszego sposobu.

0

stosowanie tej metody (ex jest wystąpienie ConstraintViolationException):

Set<ConstraintViolation<?>> set = ex.getConstraintViolations(); 
List<ErrorField> errorFields = new ArrayList<>(set.size()); 
ErrorField field = null; 
for (Iterator<ConstraintViolation<?>> iterator = set.iterator();iterator.hasNext();) { 
    ConstraintViolation<?> next = iterator.next(); 
    System.out.println(((PathImpl)next.getPropertyPath()) 
      .getLeafNode().getName() + " " +next.getMessage()); 


} 
Powiązane problemy