lie*_*cno 14 java validation hibernate-validator
我@Valid对JSR-303 的注释有问题.在注释工作正常,正常列表或及组合,但我试图验证的地图,其中包含列表,即
@Valid
HashMap<String, ArrayList<Object1>> map;
在这种情况下,Object1不验证类的实例.是否有一种方便的方法来递归执行此操作,而无需迭代每个对象并手动验证它?
Per*_*ion 13
当映射值本身是列表时,规范不指定验证行为.
来自JSR 303规范:
验证迭代器提供的每个对象.对于Map,验证每个Map.Entry的值(未验证密钥).
由于您的案例中的值是一个没有@Valid注释的列表,因此不会对其进行处理.要解决这个问题,您可以:
将包含的列表包装在另一个bean中,强制将注释处理到列表中.
public class ListHolder<T extends Iterable> {
    @Valid
    public T wrappedList;
}
或者,您也可以编写自定义验证器来处理复杂的地图.像这样的东西:
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ValidMapValidator.class)
public @interface ValidMap {
   String message() default "valid.map";
   Class<?>[] groups() default {};
   Class<? extends Payload>[] payload() default {};
}
public class ValidMapValidator implements
      ConstraintValidator<ValidMap, Map<?, ?>> {
   @Override
   public void initialize(final ValidMap annotation) {
      return;
   }
   @Override
   public boolean isValid(final Map<?, ?> map,
         final ConstraintValidatorContext context) {
      if (map == null || map.size() == 0)
         return true;
      // Iterate each map entry and validate
      return true;
   }
}
| 归档时间: | 
 | 
| 查看次数: | 8116 次 | 
| 最近记录: |