【问题标题】:javax.validation to validate list of values?javax.validation 验证值列表?
【发布时间】:2011-06-22 19:12:28
【问题描述】:

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

我见过@size(min=1, max=25)@notnull,但有没有类似的@In(red, blue, green, pink)

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

【问题讨论】:

  • 嗨。我猜这是不可能使用 javax 验证器呢?我想我可以在表/数据库级别创建一个约束?

标签: java spring validation javax


【解决方案1】:

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

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

【讨论】:

  • 如果红蓝等是常数怎么办?
  • 是否也允许空值?
【解决方案2】:

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

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

}

【讨论】:

  • 在尝试验证 char 列表时很有用,但您不能将“值”定义为对象数组。编译器给出此错误:'注解属性 In.values 的类型对象 [] 无效;只允许原始类型、字符串、类、注释、枚举或其一维数组'
【解决方案3】:

你可以创建一个枚举

public enum Colors {
    RED, PINK, YELLOW
}

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

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

这将根据枚举验证您的有效负载,假设您已添加 @有效的 在你的 RestController 中。

【讨论】:

  • 我不这么认为。 @Enumerated 是 javax.persistence 注解,而不是 javax.validation 注解。
【解决方案4】:

您可以自己创建验证类。供参考https://www.javatpoint.com/spring-mvc-custom-validation

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多