Как поддерживать Accept-Header и параметр для изменения языкового стандарта Spring? - PullRequest
0 голосов
/ 06 мая 2020

В весенней загрузке 1.5.9,

Я хочу поддерживать оба, Accept-Header и ?lang= для переключения локали.

Вот как я настроил:

@Configuration
public class WebMvcConfigurerAdapterConfig extends WebMvcConfigurerAdapter {

    @Bean
    public LocaleResolver localeResolver() {
        AcceptHeaderLocaleResolver acceptHeaderLocaleResolver = new AcceptHeaderLocaleResolver() {
            @Override
            public Locale resolveLocale(HttpServletRequest request) {
                String locale = request.getParameter("lang");
                return locale != null
                        ? org.springframework.util.StringUtils.parseLocaleString(locale)
                        : super.resolveLocale(request);
            }
        };
        acceptHeaderLocaleResolver.setDefaultLocale(webMvcProperties.getLocale());
        return acceptHeaderLocaleResolver;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

Он отлично работает для заголовка accept, но когда я устанавливаю ?lang=fr, я получаю:

 UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy

Это было взято из ответа здесь: { ссылка }

Я также пытался использовать другой ответ (перед редактированием) с:

   @Bean
   public AcceptHeaderLocaleResolver localeResolver(WebMvcProperties mvcProperties) {
        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver() {
            @Override
            public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
                LocaleContextHolder.setLocale(locale);
            }
        };

        localeResolver.setDefaultLocale(mvcProperties.getLocale());
        return localeResolver;
    }

Но эта причина имеет два разных значения для локали в моем @Controller, когда я добавляю ?lang=fr:

    public ModelAndView index (Locale locale) { // en-US
        Locale localeFromContext = LocaleContextHolder.getLocale(); // fr
    }

Как я могу поддерживать как заголовок, так и параметр для установки локали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...