![](/img/trans.png)
[英]Validate request with List<Integer> as a field with javax.validation
[英]javax.validation to validate list of values?
有没有一种方法可以使用 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,这将根据枚举验证您的有效负载。
您可以自己创建验证类。 供参考https://www.javatpoint.com/spring-mvc-custom-validation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.