【问题标题】:Getting message from property file in Spring boot在 Spring Boot 中从属性文件中获取消息
【发布时间】:2018-01-08 01:48:21
【问题描述】:

我正在尝试从属性文件中读取我的错误消息,但遇到此错误消息

org.springframework.context.NoSuchMessageException: No message found under code 'error.id.invalid' for locale 'en'.

我正在使用 ResourceBundleMessageSource 设置基本名称

@Bean
public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("classpath:validations/messages.properties");
    return messageSource;
}

这是我的异常处理程序

@Autowired
private ResourceBundleMessageSource messageSource;

@ExceptionHandler(value = {ConstraintViolationException.class})
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorMessageDTO handleResourceNotFoundException(ConstraintViolationException e) {

    ErrorMessageDTO message = null;

    if (e != null) {
        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
        StringBuilder strBuilder = new StringBuilder();
        for (ConstraintViolation<?> violation : violations) {
            Locale currentLocale = LocaleContextHolder.getLocale();
            String msg = messageSource.getMessage(violation.getMessage(), null, currentLocale);
            strBuilder.append(msg).append(", ");
        }
        message = new ErrorMessageDTO(MessageType.ERROR, strBuilder.toString(), BAD_REQUEST_ACTION, MODEL_INVALID_CODE);
        try {
            slf4jLogger.error(mapper.writeValueAsString(message));

        } catch (JsonProcessingException ex) {
            slf4jLogger.error(ex.getMessage());

        }
    }
    return message;
}

这是我项目的目录结构

src
   main
     resources
        validations
           messages_en_US.properties

谁能帮我弄清楚我错过了什么或做错了什么?

我知道有很多与此错误相关的问题,但没有一个解决方案对我有用。任何帮助表示赞赏。

提前谢谢你。

【问题讨论】:

  • 如果删除.properties 并在声明中保留messageSource.setBasename("classpath:validations/messages"); 会怎样?
  • 这也没有帮助@StanislavL

标签: spring validation resourcebundle jsr


【解决方案1】:

这是提供ResourceBundleMessageSource 的方式。删除.properties

@Bean
public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("classpath:validations/messages");
    return messageSource;
}  

也尝试提供一个 LocaleResolver。

@Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.ENGLISH);
        return slr;
    }

【讨论】:

  • 那也没有帮助。我也试过使用CookieLocaleResolverpublic CookieLocaleResolver localeResolver() { CookieLocaleResolver localeResolver = new CookieLocaleResolver(); Locale defaultLocale = new Locale("en"); localeResolver.setDefaultLocale(defaultLocale); return localeResolver; }
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2016-04-29
  • 2015-06-18
  • 2019-01-11
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多