javax.validation验证值列表?

jon*_*ney 25 java validation spring javax

有没有办法使用javax.validation验证一个名为color的字符串类型的变量,需要使用注释只有这些值(红色,蓝色,绿色,粉红色)?

我所看到的 @size(min=1, max=25)@notnull,但有没有这样的事情@In(red, blue, green, pink)

或多或少类似于In-keyword用于mysql

小智 63

在这种情况下,我认为使用@Pattern注释会更简单,就像下面的代码片段一样.如果您想要不区分大小写的评估,只需添加适当的标志:

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

  • 如果红蓝等是常数怎么办? (2认同)
  • 它也允许空值吗? (2认同)

Wou*_*ens 8

您可以创建自定义验证注释.我会在这里写(未经测试的代码!):

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

}
Run Code Online (Sandbox Code Playgroud)

  • 尝试验证char列表时很有用,但您不能将“值”定义为对象数组。编译器会出现以下错误:'注释属性In.values的类型为Object []无效;仅允许使用基本类型,字符串,类,注释,枚举或其一维数组。 (2认同)