Spring自定义验证i18n

时间:2016-06-08 19:05:57

标签: spring validation spring-boot

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查找消息?

1 个答案:

答案 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());
}

现在我得到了我的期望。