【问题标题】:in SpringMVC getMessage from i18n properties in a function outside the controller在 SpringMVC 中从控制器外部函数中的 i18n 属性中获取消息
【发布时间】:2023-04-01 12:15:02
【问题描述】:

我想从函数中的 i18n 属性中检索消息。我可以通过以下语句在我的服务层或控制器中检索消息:

@Autowired
private ApplicationContext appContext;


public void myFunction(){
String errrorMsg = appContext.getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
}

但我想在服务层或控制器之外的函数中检索此 i18n 消息。这个函数是从我的服务层调用的。 我该怎么做? 我试图在外部类中复制相同的代码,但我得到 nullPointerException

【问题讨论】:

    标签: java spring spring-mvc internationalization


    【解决方案1】:

    将MessageSource 注入您的服务(而不是ApplicationContext)。

    在该服务中,您可以使用messageSource..getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());

    如果您需要此服务之外的此功能(在某些非 Spring-Bean 实例中),那么我会将 MessageSource(和语言环境)传递给其他类。

    @Component
    public class MessageSourceExternalizer {
    
        @Autowired
        private MessageSource messageSource;
    
        public String getMessage(String code) {
            //Attention LocaleContextHolder.getLocale() is thread based,
            //maybe you need some fallback locale
            return messageSource.getMessage(code, new Object[0], LocaleContextHolder.getLocale());
        } }
    
    @Service
    public YourService {
    
        @Autowired
        private MessageSourceExternalizer messageSourceExternalizer;
    
        public void yourServiceMethod() {
            ....
            YourNotSpringBean yourNotSpringBean 
                 = new YourNotSpringBean(messageSourceExternalizer);
            yourNotSpringBean.doSomething(...);
        } }
    
    
    public class YourNotSpringBean {
    
        private final MessageSourceExternalizer messageSourceExternalizer;
        public YourNotSpringBean(MessageSourceExternalizer messageSourceExternalizer) {
             this.messageSourceExternalizer = messageSourceExternalizer;
        }
    
        public void doSomething() {
            ....
            this.messageSourceExternalizer.getMessage("application.errorcode.sessionExpiry");
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多