用于验证值列表的javax.validation?

有没有一种方法可以使用javax.validation来验证一个叫做color的字符串类型的变量,它只需要使用这些值(红色,蓝色,绿色,粉红色)使用注释?

我已经看到了@size(min=1, max=25)@notnull但是有这样的@In(red, blue, green, pink)

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


在这种情况下,我认为使用@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
    }

}

你可以创建一个枚举

public enum Colors {
    RED, PINK, YELLOW
}

然后在你的模型中,你可以像这样验证它:

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

由于你在RestController中添加了@Valid,它将验证你的有效载荷与枚举。

链接地址: http://www.djcxy.com/p/25375.html

上一篇: javax.validation to validate list of values?

下一篇: fsevent in the background