首页 / JAVA / Javax验证:地图的约束违规
Javax验证:地图的约束违规
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javax验证:地图的约束违规,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2358字,纯文字阅读大概需要4分钟。
内容图文
![Javax验证:地图的约束违规](/upload/InfoBanner/zyjiaocheng/784/8ccb6df752f544a1acdcde79c93abeac.jpg)
我使用Map作为本地化值,其中locale作为键,String作为值.对于必填字段,我需要检查至少设置了所需的语言环境 – 或者至少设置了一些值.我已经实现了验证注释,可以在这样的Map字段和相应的验证器上使用.问题是,如何报告缺失值? UI中用于绑定字段错误/值的属性路径每次都出错:
// Domain object:
@LocalizationRequired
private Map<Locale, String> field;
// LocalizationRequiredValidator:
public boolean isValid(Map<Locale, String> map, ConstraintValidatorContext context) {
if (requiredLocales.isEmpty()) {
// Check that there exists any not null value
} else {
context.disableDefaultConstraintViolation();
boolean valid = true;
for (Locale requiredLocale : requiredLocales) {
if (map.get(requiredLocale) == null) { // e.g. fi
valid = false;
context.buildConstraintViolationWithTemplate("LocalizationRequired")
// These end up in wrong property path:
// .addNode(requiredLocale)
// --> field.fi
// .addNode("[" + requiredLocale + "]")
// --> field.[fi]
// .addNode(null).addNode(requiredLocale).inIterable()
// --> field.fi
// .addNode(null).addNode(null).inIterable().atKey(requiredLocale)
// --> field
.addConstraintViolation();
}
}
return valid;
}
}
此错误的正确路径是“field [fi]”但看起来我只能访问索引的子属性.在这种情况下,对象本身被索引.我正在使用Hibernate Validator.
解决方法:
我无法找到一种方法来报告元素级别的索引字段的错误. – 这是否在规范中被忽略了?
这是我做的:
我使用了一个“embeddable”bean,而不是Map,它使用了所有支持的语言环境的实际字段(例如LocalizedString(String fi,String en等).然后报告违规情况如下:
context.buildConstraintViolationWithTemplate("LocalizationRequired")
.addNode(requiredLocale)
.addConstraintViolation();
这在我们的情况下是可行的,因为我们有一组预定义的受支持语言,但它不能扩展到具有任意索引的索引字段.
更进一步,Spring的LocalValidatorFactoryBean或Hibernate Validator都不能正确支持嵌入式验证.由于同一组件在具有不同验证要求的不同位置使用,我不能将@Valid与组件本身内的实际验证注释一起使用 – 至少不支持@Valid上的验证组.
Spring的LocalValidatorFactoryBean或Hibernate Validator的问题是ConstraintViolation的invalidValue是LocalizedString(“field”)而不是报告的错误嵌套字段(“field.fi”)的值.幸运的是,这可以通过覆盖LocalValidatorFactoryBean.processConstraintViolations来解决,方法是删除“使用ConstraintViolation中的无效值自定义FieldError注册”并简单地通过
errors.rejectValue(field, errorCode, errorArgs, violation.getMessage());
这样Spring就可以使用给定的字段解析invalidValue.
内容总结
以上是互联网集市为您收集整理的Javax验证:地图的约束违规全部内容,希望文章能够帮你解决Javax验证:地图的约束违规所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。