代码之家  ›  专栏  ›  技术社区  ›  drenda

枚举转换不会回退到rest消息

  •  0
  • drenda  · 技术社区  · 6 年前

    我使用的是Spring Boot 1.5.8、Spring Data REST和Spring HATEOAS。在公开REST端点的应用程序中,我启用了:

    spring.data.rest.enable-enum-translation=true
    

    这样,当我请求枚举时,它会根据我的语言环境进行翻译。

    更多配置信息:

        @Bean
        public LocaleResolver localeResolver() {
            return new SmartLocaleResolver();
        }
    
        public class SmartLocaleResolver extends CookieLocaleResolver {
            @Override
            public Locale resolveLocale(HttpServletRequest request) {
                String acceptLanguage = request.getHeader("Accept-Language");
                if (acceptLanguage == null || acceptLanguage.trim().isEmpty()) {
                    return super.determineDefaultLocale(request);
                }
                return request.getLocale();
            }
        }
    
        @Bean
        public MessageSource messageSource() {
            ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
            messageSource.setBasenames("classpath:/i18n/messages");
            // messageSource.setDefaultEncoding("UTF-8");
            // set to true only for debugging
            messageSource.setUseCodeAsDefaultMessage(false);
            messageSource.setCacheSeconds((int) TimeUnit.HOURS.toSeconds(1));
            messageSource.setFallbackToSystemLocale(false);
            return messageSource;
        }
    
        @Bean
        public MessageSourceAccessor messageSourceAccessor() {
            return new MessageSourceAccessor(messageSource());
        }
    

    如您所见,我还设置了消息源,以便翻译来自服务器的异常。

    我的服务器区域设置是it,我已经 rest-messages.properties (美国翻译)和 rest-messages_it.properties (IT翻译)。我的目标是 rest消息。属性 当语言无法识别时,以及 rest-messages\u it。属性 当语言是它的时候。

    现在它不起作用了。弹簧数据静止读取 rest-messages\u it。属性 当所选语言没有对应的更正文件时。

    我用消息解决了这个问题。属性使用 messageSource.setFallbackToSystemLocale(false); . 有没有同样的方法 rest-messages 文件夹?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Cepr0    6 年前

    如果将 RepositoryRestMvcConfiguration ,重写并复制其方法 resourceDescriptionMessageSourceAccessor ,但已设置 fallbackToSystemLocale false 对于 messageSource ?

    @Override
    @Bean
    public MessageSourceAccessor resourceDescriptionMessageSourceAccessor() {
    
        try {
    
            PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
            propertiesFactoryBean.setLocation(new ClassPathResource("rest-default-messages.properties"));
            propertiesFactoryBean.afterPropertiesSet();
    
            ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
            messageSource.setBasename("classpath:rest-messages");
            messageSource.setCommonMessages(propertiesFactoryBean.getObject());
            messageSource.setDefaultEncoding("UTF-8");
    
            // Adding this line:
            messageSource.setFallbackToSystemLocale(false);
    
            return new MessageSourceAccessor(messageSource);
    
        } catch (Exception o_O) {
            throw new BeanCreationException("resourceDescriptionMessageSourceAccessor", "", o_O);
        }
    }
    

    如果您创建 rest-default-messages.properties 具有默认语言环境?值的文件?。。


    问题作者更新

    保护春天。数据其余。*属性创建 RepositoryRestConfiguration 如下面所述的Bean post :

    @Bean
    @ConfigurationProperties(prefix = "spring.data.rest")
    @Override
    public RepositoryRestConfiguration config() {
        return super.config();
    }