2017-05-22 25 views
6

Jak ustawić ograniczenie sprawdzania poprawności komponentu bean, aby co najmniej jeden i maksymalnie 10 elementów zawierało wartość List?Czy sprawdzanie rozmiaru fasoli listy?

Żaden z następujących utworów:

@Min(1) 
@Max(10) 
@Size(min=1, max=10) 
private List<String> list; 
+1

Dla mnie @Size działa idealnie. Czy możesz pokazać nam kod, w którym zatwierdzasz? Czy używałeś import javax.validation.constraints.Size? – ByeBye

Odpowiedz

8

Stworzyłem prostą klasę:

public class Mock { 

    @Size(min=1, max=3) 
    private List<String> strings; 

    public List<String> getStrings() { 
     return strings; 
    } 

    public void set(List<String> strings) { 
     this.strings = strings; 
    } 

} 

i przetestować:

Mock mock = new Mock(); 
mock.setStrings(Collections.emptyList()); 
final Set<ConstraintViolation<Mock>> violations1 = Validation.buildDefaultValidatorFactory().getValidator().validate(mock); 
assertFalse(violations1.isEmpty()); 

mock.setStrings(Arrays.asList("A", "B", "C", "D")); 
final Set<ConstraintViolation<Mock>> violations2 = Validation.buildDefaultValidatorFactory().getValidator().validate(mock); 
assertFalse(violations2.isEmpty()); 

Wydaje się, że @Size adnotacja pracuje dobrze. Pochodzi od javax.validation.constraints.Size

+1

Mam to: Używam 'spring-mvc', a sprawdzanie poprawności jest stosowane tylko na' Liście', jeśli lista jest zdefiniowana w ogóle w parametrach wejściowych (po prostu pominąłem listę w moim żądaniu, ponieważ ustawiłem min = 1). Rozwiązaniem jest użycie '@ NotNull'' @ Size' w połączeniu, jeśli lista powinna zawsze istnieć i mieć przynajmniej jeden przedmiot. – membersound