validator validated starter example custom bean java spring validation javax

validated - javax.validation para validar la lista de valores?



spring custom validator (3)

¿Hay alguna forma de usar javax.validation para validar una variable de tipo string llamada color que necesita tener estos valores solo (rojo, azul, verde, rosa) usando anotaciones?

He visto @size(min=1, max=25) y @notnull pero hay algo como esto @In(red, blue, green, pink)

más o menos similar a la In-keyword utilizada en mysql


En ese caso, creo que sería más sencillo utilizar la anotación @Pattern, como el fragmento de código a continuación. Si desea una evaluación que no distinga mayúsculas y minúsculas, simplemente agregue la marca correspondiente:

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


Puede crear una anotación de validación personalizada. Lo escribiré aquí (código no probado):

@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 } }


puedes crear una enumeración

public enum Colors { RED, PINK, YELLOW }

Y luego en tu modelo, puedes validarlo así:

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

que validará su carga útil contra la enumeración, dado que ha agregado @Valid en su RestController.