javax.validation 来验证值列表?
2022-09-01 01:14:57
有没有办法使用javax.validation来验证一个名为color的字符串类型的变量,该变量只需要使用注释来具有这些值(红色,蓝色,绿色,粉红色)?
我见过,但有这样的东西吗@size(min=1, max=25)
@notnull
@In(red, blue, green, pink)
或多或少类似于In-keyword
mysql
有没有办法使用javax.validation来验证一个名为color的字符串类型的变量,该变量只需要使用注释来具有这些值(红色,蓝色,绿色,粉红色)?
我见过,但有这样的东西吗@size(min=1, max=25)
@notnull
@In(red, blue, green, pink)
或多或少类似于In-keyword
mysql
在这种情况下,我认为使用@Pattern注释会更简单,就像下面的代码段一样。如果您想要不区分大小写的评估,只需添加相应的标志:
@Pattern(regexp = "red|blue|green|pink", flags = Pattern.Flag.CASE_INSENSITIVE)
您可以创建自定义验证批注。我将在这里写它(未经测试的代码!
@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
}
}