Estoy utilizando la validación basada en la anotación de Spring 3. Quiero añadir una tras la validación de campos StringY/O condición en la validación basada en la anotación de primavera
El campo puede ser nulo O éste debe contener una cadena no vacía
Sé anotación como @Null
, @NotEmpty
pero ¿cómo puedo usar tanto con una condición O?
Solución:
Usando @Size(min=1)
ayuda pero no manejan espacios. Por lo tanto, agregó una anotación personalizada NotBlankOrNull
que permitirá null
y cadenas no vacías también se ocupa de los espacios en blanco. Muchas gracias @Ralph.
Aquí es mi clase de anotación
@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 { };
}
Validador
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) {
}
}
También he actualizado en mi site.
Muchas gracias sugerencia y corregirme. Intenté '@Size (min = 1)' y funciona para 'null' y cadenas no vacías. Me pregunto cómo tratar si el usuario ingresa espacios? – xyz
@Ajinkya: eche un vistazo al código fuente de NotBlank Annotation. Nuevamente se anota con NotNull. Pero está validado por NotBlankValidator (por fortuna, el NotBlankValidator devuelve verdadero (válido) para nulo). Por lo tanto, necesita su propia anotación pero puede reutilizar la implementación de Validator> '@Constraint (validatedBy = {NotBlankValidator.class}) @ Target ... @ Retention ... public @interface NotBlankOrNull' – Ralph
Muchas gracias man :) – xyz