Używam sprawdzania poprawności opartego na adnotacji Spring 3. Chcę dodać następującą walidacji pól SmyczkowychI/lub warunek w sprawdzaniu poprawności opartym na adnotacji sprężynowej
pole może być Null LUB powinna ona zawierać non pusty ciąg
wiem adnotacja jak @Null
, @NotEmpty
ale jak można używać zarówno z warunek LUB?
Rozwiązanie:
Korzystanie @Size(min=1)
pomaga ale nie obsługują spacji. Dodałem więc niestandardową adnotację NotBlankOrNull
, która pozwoli null
i niepustym łańcuchom również zajmie puste miejsca. Wielkie dzięki @Ralph.
Oto moja Adnotacja klasa
@Documented
@Constraint(validatedBy = { NotBlankOrNullValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface NotBlankOrNull {
String message() default "{org.hibernate.validator.constraints.NotBlankOrNull.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
Validator
public class NotBlankOrNullValidator implements ConstraintValidator<NotBlankOrNull, String> {
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (s == null) {
return true;
}
return s.trim().length() > 0;
}
@Override
public void initialize(NotBlankOrNull constraint) {
}
}
Mam również aktualizowane na moim site.
Dziękuję wiele za sugestię i poprawienie mnie .Spróbowałem '@Size (min = 1)' i działa dla 'null' i niepustych ciągów. Zastanawiasz się, jak sobie poradzić, jeśli użytkownik wprowadzi spacje? – xyz
@Ajinkya: spójrz na kod źródłowy NotBlank Adnotacja. Znowu jest opatrzone notatką NotNull. Ale jest to sprawdzane przez NotBlankValidator (na szczęście NotBlankValidator zwraca wartość true (valid) dla wartości null). Potrzebujesz więc własnej adnotacji, ale możesz ponownie użyć implementacji Validator> '@Constraint (validatedBy = {NotBlankValidator.class}) @ Target ... @ Retention ... public @interface NotBlankOrNull' – Ralph
Wielkie dzięki człowieku :) – xyz