0

我使用带有 Hibernate Validator 的 Spring 3.1。我想访问我的 i18n 属性文件以在自己的验证类中获取我的验证错误字符串。要获取此消息,我使用:

@Autowired
private MessageSource messageSource;

String message = messageSource.getMessage("ID", null, Locale.ENGLISH);

这适用于正常的 GET/POST 请求。但是,如果我使用 ajax 调用,我会收到以下错误:

javax.validation.ValidationException:HV000028:isValid 调用期间出现意外异常。在 org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:311) 在 org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180) 在 org.hibernate.validator.internal .engine.ConstraintTree.validateConstraints(ConstraintTree.java:124) 在 org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86) 在 org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint (ValidatorImpl.java:442) 在 org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387) 在 org.hibernate.validator.internal.engine.ValidatorImpl。

我还尝试在控制器中调用 messageSource.getMessage(也在 AJAX 请求之后),在这里它可以工作。如果是 AJAX 调用,验证器类似乎无法访问 messageSource。

任何建议如何解决这个问题?

4

1 回答 1

1

好的,我发现了问题。

我使用 Hibernate Validator 手动验证了对象(DTO),而不是使用 Spring 绑定机制。验证器对象不在“Spring”中,因为我通过以下方式对其进行了初始化:

Validator validator = validatorFactory.getValidator();
Set<ConstraintViolation<MyObjectClass>> constraintViolations = validator.validate(myObject);

现在我使用 Spring 的内置机制(>= 3.2 版)

public @ResponseBody
ArrayNode methodName(@Valid @RequestBody MyObjectClasss myObject, BindingResult result) throws DatatypeConfigurationException {
if (result.hasErrors()) {
        for (ObjectError objectError : result.getAllErrors()) {
            // work with validation error ... 
        }
    }
}
于 2013-06-26T09:23:56.603 回答