遵循文档http://docs.spring.io/spring-data/rest/docs/2.4.2.RELEASE/reference/html/#validation我为spring-data-rest存储库调用设置了一个非常简单的Validator:
public class DealValidator implements Validator {
@Override
public boolean supports(Class<?> aClass) {
return Deal.class.isAssignableFrom(aClass);
}
@Override
public void validate(Object o, Errors errors) {
errors.reject("deal.error", "No deal");
}
}
这是配置
@Override
protected void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
validatingListener.addValidator("beforeCreate", new DealValidator());
}
@Configuration
static class I18nConfiguration {
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("classpath:messages");
return source;
}
}
配置似乎没问题,验证器被正确调用,http请求产生错误响应,但是没有从messages.properties和默认文本返回错误文本。这是一个错误吗?
答案 0 :(得分:3)
我遇到了同样的问题。 Spring-data-rest仅序列化引用字段的验证错误。
因此,您可以使用rejectValue(String field, String errorCode, String defaultMessage)
代替reject
有关实施细节,请参阅org.springframework.data.rest.webmvc.support.RepositoryConstraintViolationExceptionMessage
。实现只是处理org.springframework.validation.Errors#getFieldErrors()
。