我使用hibernate-validator
使用bean验证功能验证器逻辑
public enum ValidatorFactory {
SINGLE_INSTANCE {
javax.validation.ValidatorFactory avf = Validation.buildDefaultValidatorFactory();
@Override
public Validator getValidator() {
return avf.getValidator();
}
};
public abstract Validator getValidator();
}
我在一个具有可选字段的对象上调用validator.validate(obj),如下所示
@UnwrapValidatedValue
@Valid
@Size(min = 1, max = 9)
private Optional<Map<Integer, AreaType>> field;
错误 javax.validation.UnexpectedTypeException:HV000030:找不到约束的验证器&#39; javax.validation.constraints.Size&#39;验证类型&#39; java.util.Map&#39;。
答案 0 :(得分:0)
根据JPA文件:
评估字段或属性的大小,并且必须与 指定的边界。如果字段或属性是String,则为size 的字符串被评估。如果字段或属性是Collection, 评估集合的大小。如果字段或属性是 地图,评估地图的大小。如果字段或属性是 数组,计算数组的大小。使用其中一个可选的最大值 或min元素来指定边界。
据说,你不能把@Size放在Optional类型上,而只能放在String,Collections和Arrays上。
尝试删除Optional类型,如下所示:
@Size(min = 1, max = 9)
private Map<Integer, AreaType> field;