Spring 1.3.5
我已经使用org.springframework.validation.Validator
界面创建了一些自定义验证程序。我试图使用本地化的错误消息。作为测试验证者,我得到了以下内容:
@Component
public class RegionValidator implements Validator {
@Autowired
RegionService regionService;
@Autowired
private MessageSource messageSource;
@Override
public boolean supports(Class<?> clazz) {
return Region.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
String message = messageSource.getMessage("region.name.unique", null, null);
errors.rejectValue("name", "region.name.unique", "Name must be unique");
}
}
在我application.yml
我有以下内容:
spring:
messages:
basename: i18n/messages
cache-seconds: -1
encoding: UTF-8
在验证程序代码中,我收到了messageSource
的正确消息,但是如何根据给定的代码让errors.rejectValue
查找消息?
答案 0 :(得分:1)
我不确定这是100%的方法,但我在原始问题中没有提到我有一个@ControllerAdvice
类来处理错误消息。我注意到它正在这样做......
fieldErrorResource.setMessage(fieldError.getDefaultMessage());
始终会获取默认消息而不是本地化消息。所以我必须做以下事情:
if (fieldError.getCode() != null) {
fieldErrorResource.setMessage(messageSource.getMessage(fieldError.getCode(), null, null));
} else {
fieldErrorResource.setMessage(fieldError.getDefaultMessage());
}
现在我得到了我的期望。