亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring LocalResolver 基于查詢參數“lang=en”?

Spring LocalResolver 基于查詢參數“lang=en”?

九州編程 2021-07-19 16:12:11
我可以告訴spring-boot自動解析查詢參數所請求locale的,例如&lang=en嗎?我想讓查詢參數優先于Accept-Language參數。我發現了以下兩個屬性,但與查詢參數無關。spring.mvc.locale= # Locale to use. By default, this locale is overridden by the "Accept-Language" header.spring.mvc.locale-resolver=accept-header # Define how the locale should be resolved.我嘗試如下,這給出了一個例外:@Configurationpublic class AppConfig extends WebMvcConfigurerAdapter {   @Bean   public LocaleChangeInterceptor localeChangeInterceptor() {       LocaleChangeInterceptor lci = new LocaleChangeInterceptor();       lci.setParamName("lang");       return lci;   }   @Override   public void addInterceptors(InterceptorRegistry registry) {       registry.addInterceptor(localeChangeInterceptor());   }}結果是:java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

解決辦法大概如下。我仍然發現設置非常違反直覺。特別是我會期望:

  • LocaleChangeInterceptor自身注冊,但不并有來電addInterceptors()

  • spring.mvc.locale參數仍然設置到自定義 LocaleResolver 中,但不會并且必須從WebMvcProperties

如果需要所有這些,文檔可能需要對此進行更多解釋。

@Configuration

public class AppConfig extends WebMvcConfigurerAdapter {

   @Bean

   public LocaleChangeInterceptor localeChangeInterceptor() {

       LocaleChangeInterceptor lci = new LocaleChangeInterceptor();

       lci.setParamName("lang");

       return lci;

   }


   @Override

   public void addInterceptors(InterceptorRegistry registry) {

       registry.addInterceptor(localeChangeInterceptor());

   }


   @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;

    }

}

討論后更新改進版本:


@Configuration

public class AppConfig implements WebMvcConfigurer {

   @Bean

   public AcceptHeaderLocaleResolver localeResolver(WebMvcProperties mvcProperties) {

        AcceptHeaderLocaleResolver localeResolver = 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);

        }

        };


        localeResolver.setDefaultLocale(mvcProperties.getLocale());

        return localeResolver;

    }

}


查看完整回答
反對 回復 2021-07-23
  • 2 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號