2013-08-24 131 views
0

在我的REST API我想允許用戶使用lang參數來設置語言環境,即春REST API和國際化

http://somehost/resource?param1=value1&lang=fr 

如果lang參數不存在於URL則Accept-Language頭應被使用並設置爲區域設置。

我在我的REST API中使用了Spring的i18n特性。我瀏覽了文檔並配置了必要的bean。如果我通過Accept-Language標題發送請求,它似乎可以正常工作,當我呼叫LocaleContextHolder.getLocale()時,它會返回我在標題中設置的語言環境。

如果我使用lang URL參數不起作用。

我該如何配置Spring以使用區域設置參數呢?

<bean id="localeInterceptor"  
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="lang" /> 
</bean> 

<bean  
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" > 
    <property name="interceptors"> 
     <list> 
      <ref bean="localeInterceptor" /> 
     </list> 
    </property> 
</bean> 

<bean id="sessionLocaleResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/> 

<bean id="messages" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>messages</value> 
     </list> 
    </property> 
</bean> 

回答

0

我有兩個建議嘗試。首先,你確定LocaleChangeInterceptor被調用?我所看到的大多數配置都有的HandlerMapping。另一個建議是關於另一個ID,即sessionLocaleResolver,我認爲它應該是localeResolver。我不確定Spring是否依靠這些id值或默認的類類型將所有這些連接在一起,但值得一試。