首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否使用javax.validation验证值列表?

是否使用javax.validation验证值列表?
EN

Stack Overflow用户
提问于 2011-02-07 22:52:39
回答 4查看 40.8K关注 0票数 39

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

我见过@size(min=1, max=25)@notnull,但是有像这样的@In(red, blue, green, pink)吗?

mysql中使用的In-keyword大致相似

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-24 20:55:03

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

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

票数 104
EN

Stack Overflow用户

发布于 2011-03-03 17:50:02

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

代码语言:javascript
复制
@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
    }

}
票数 12
EN

Stack Overflow用户

发布于 2017-10-16 19:34:50

您可以创建枚举

代码语言:javascript
复制
public enum Colors {
    RED, PINK, YELLOW
}

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

代码语言:javascript
复制
public class Model {
    @Enumerated(EnumType.STRING)
    private Colors color;
}

假设您在RestController中添加了@Valid,它将根据枚举验证您的有效负载。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4922655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档