[英]Spring JSR-303 ConstraintValidator not support list.add()
我遇到了这样一个错误的错误:我使用自己的批注@Category
进行了验证,并且类CategoryValidator implements ConstraintValidator<Category, String>
都是关于list.add()的原因(导致它无法正常工作):
请求处理失败; 嵌套的异常是javax.validation.ValidationException:HV000028:isValid调用期间发生了意外的异常。
有人可以给我任何解释吗?
CategoryValidator
@Component
public class CategoryValidator implements ConstraintValidator<Category, String> {
@Autowired
ProductService productService;
List<String> allowedCategories;
@Override
public void initialize(Category constraintAnnotation) {
allowedCategories = Arrays.asList(constraintAnnotation.allowedCategories());
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// This .add() it not working here
// allowedCategories.add("Laptop");
for (String category : allowedCategories) {
if (category.equalsIgnoreCase(value)) {
return true;
}
}
return false;
}
}
类别
@Target( { METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = CategoryValidator.class)
@Documented
public @interface Category {
String message() default "{com.ehr.webstore.validator.Category.message}";
Class<?>[] groups() default {};
public abstract Class<? extends Payload>[] payload() default {};
String[] allowedCategories();
}
产品
public class Product {
/* [...] */
@Category(allowedCategories = {"Laptop", "Tablet", "Smart Phone", "Another"})
private String category;
/* [...] */
}
好吧,使用完整的Arrays.asList()
会更容易,但是我认为您的问题是您不能将元素添加到Arrays.asList()
创建的List
:它是不可变的。
如果希望能够添加新元素,则需要执行以下操作: new ArrayList<>( Arrays.asList( ... ) )
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.