如何解决Hibernate Validator 5.3 中的自定义验证,无需实现 ConstraintValidator
在不实施ConstraintValidator的情况下,添加使用Hibernate Validator的自定义验证的正确方法是什么。
我以某种方式设法实现了它:-
默认约束验证:-
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
//validating Bean
Set<ConstraintViolation<Object>> constraintViolations = this.validator.validate(opts);
if(constraintViolations.size() > 0)
throw new BeanValidationException(constraintViolations);
对于自定义验证和默认值:-
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
//validating Bean
Set<ConstraintViolation<Object>> constraintViolations = this.validator.validate(opts);
//从集合创建列表
List<String> invalid = new ArrayList<>();
constraintViolations.stream().forEach((t) -> {
invalid.add(t.getMessage());
});
//添加自定义 bean Validaiton 消息
if(thisHappens){
invalid.add("validationError");
}
if(thisHappens){
invalid.add("validationError");
}
if(thisHappens){
invalid.add("validationError");
}
//thorwing exception
if(!invalid.isEmpty(){
throw new BeanValidationException(invalid);
}
BeanValidationException.class
public class BeanValidationException extends RuntimeException {
private final Set<ConstraintViolation<Object>> defaultViolations;
private final List<String> customViolations;
public BeanValidationException(Set<ConstraintViolation<Object>> constraintViolations) {
this.defaultViolations = constraintViolations;
this.customViolations = null;
}
public BeanValidationException(List<String> customViolations) {
this.customViolations = customViolations;
this.defaultViolations = null;
}
public String getValidationError() {
String message = "";
if (this.defaultViolations != null) {
if (!this.defaultViolations.isEmpty()) {
for (ConstraintViolation violationMsg : defaultViolations) {
if (!message.contains(violationMsg.getMessage())) {
message += " " + '\u2022' + " " + violationMsg.getMessage() + "\n";
}
}
}
return message;
} else {
if (!this.customViolations.isEmpty()) {
for (String violationMsg : customViolations) {
if (!message.contains(violationMsg)) {
message += " " + '\u2022' + " " + violationMsg + "\n";
}
}
}
return message;
}
}
}
并且从 getValidationError() 我收到所有验证违规消息。这是正确/推荐的方式吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。