如何在SpringMVC和API层中通过自定义验证器重用Hibernate验证
假设我有一个前端使用SpringMVC构建的应用程序。 同一应用程序出于集成目的公开API Web中的错误通过使用SpringMVC表单来显示:错误标记通过使用JSR-303和Hibernate验证器以及自定义约束来显示 一切都很好,但我希望在API层中重复使用相同的验证,如果验证失败,则会出现错误代码 假设我有一个POJO对象(只是一个示例): 并且@ValidDomain对象由该验证器验证:如何在SpringMVC和API层中通过自定义验证器重用Hibernate验证,spring,bean-validation,hibernate-validator,Spring,Bean Validation,Hibernate Validator,假设我有一个前端使用SpringMVC构建的应用程序。 同一应用程序出于集成目的公开API Web中的错误通过使用SpringMVC表单来显示:错误标记通过使用JSR-303和Hibernate验证器以及自定义约束来显示 一切都很好,但我希望在API层中重复使用相同的验证,如果验证失败,则会出现错误代码 假设我有一个POJO对象(只是一个示例): 并且@ValidDomain对象由该验证器验证: public class DomainObjectValidator implements Cons
public class DomainObjectValidator implements ConstraintValidator<ValidDomainObject, DomainObject> {
@Override
public void initialize(final ValidDomainObject constraintAnnotation) {
}
@Override
public boolean isValid(final DomainObject obj, final ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
if (obj.getAnotherSetting().equals(obj.getSuperSetting())) {
context
.buildConstraintViolationWithTemplate("{message.to.show}")
.addConstraintViolation();
}
}
}
但是,前端的消息结构与其他消息不同,并且没有插值
最好的方法是什么?看一下它是如何在
public class DomainObjectValidator implements ConstraintValidator<ValidDomainObject, DomainObject> {
@Override
public void initialize(final ValidDomainObject constraintAnnotation) {
}
@Override
public boolean isValid(final DomainObject obj, final ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
if (obj.getAnotherSetting().equals(obj.getSuperSetting())) {
context
.buildConstraintViolationWithTemplate("{message.to.show}")
.addConstraintViolation();
}
}
}
Set<ConstraintViolation<DomainObject>> validationErrors = validator.validate(domainObject);
context.buildConstraintViolationWithTemplate(
ErrorCodes.PROPERTIES_MATCH.toString()) .addConstraintViolation();