2011-02-07 9 views
12

jest sposób na użycie javax.validation do sprawdzenia poprawności zmiennej typu ciąg o nazwie color, która musi mieć tylko te wartości (czerwony, niebieski, zielony, różowy) przy użyciu adnotacji?javax.validation do sprawdzania poprawności listy wartości?

ja widać @size (min = 1, maks = 25), @notnull ale jest coś takiego @In (czerwony, niebieski, zielony, różowy)

mniej lub bardziej podobny do „W "słowo kluczowe użyte w mysql

+0

Witam. Zgaduję, że to nie jest możliwe za pomocą walidatorów javax następnie? Przypuszczam, mogę po prostu utworzyć ograniczenie na poziomie tabeli/bazy danych? – jonney

Odpowiedz

28

W tym przypadku myślę, że byłoby prościej użyć @Pattern adnotacji, tak jak na poniższym fragmencie. Jeśli chcesz wielkość liter ma znaczenie oceny, wystarczy dodać odpowiednią flagę:

@Pattern(regexp = "red|blue|green|pink", flags = Pattern.Flag.CASE_INSENSITIVE)

8

Możesz utworzyć niestandardową adnotację sprawdzania poprawności. Będę go pisać tutaj (kod niesprawdzone!):

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RUNTIME) 
@Documented 
@Constraint(validatedBy = InConstraintValidator.class) 
public @interface In 
{ 
    String message() default "YOURPACKAGE.In.message}"; 

    Class<?>[] groups() default { }; 

    Class<? extends Payload>[] payload() default {}; 

    Object[] values(); // TODO not sure if this is possible, might be restricted to String[] 
} 

public class InConstraintValidator implements ConstraintValidator<In, String> 
{ 

    private Object[] values; 

    public final void initialize(final In annotation) 
    { 
     values = annotation.values(); 
    } 

    public final boolean isValid(final String value, final ConstraintValidatorContext context) 
    { 
     if (value == null) 
     { 
      return true; 
     } 
     return ...; // check if value is in this.values 
    } 

} 
+0

Przydatne przy próbie sprawdzenia poprawności listy znaków, ale nie można zdefiniować "wartości" jako tablicy obiektów. Kompilator podaje ten błąd: "Nieprawidłowy typ Object [] dla atrybutu adnotacji In.values; dozwolony jest tylko typ pierwotny, łańcuch, klasa, adnotacja, wyliczenie lub ich jednowymiarowe tablice " – maureyes

0

można tworzyć enum

public enum Colors { 
    RED, PINK, YELLOW 
} 

a następnie w modelu można potwierdzić go tak:

public class Model { 
    @Enumerated(EnumType.STRING) 
    private Colors color; 
} 

, która sprawdzi ważność ładunku przed wyliczeniem, biorąc pod uwagę, że w swoim resie dodano @Valid tController.

Powiązane problemy