如何在SpringMVC和API层中通过自定义验证器重用Hibernate验证

如何在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

假设我有一个前端使用SpringMVC构建的应用程序。 同一应用程序出于集成目的公开API

Web中的错误通过使用SpringMVC表单来显示:错误标记通过使用JSR-303和Hibernate验证器以及自定义约束来显示

一切都很好,但我希望在API层中重复使用相同的验证,如果验证失败,则会出现错误代码

假设我有一个POJO对象(只是一个示例):

并且@ValidDomain对象由该验证器验证:

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();