2

私のREST APIでは、ユーザーがlangパラメータを使用してロケールを設定できるようにしたいと考えています.

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

langパラメータが URL に存在しない場合は、ヘッダーAccept-Languageを使用してロケールとして設定する必要があります。

REST API で Spring の i18n 機能を使用しています。ドキュメントに目を通し、必要な Bean を構成しました。ヘッダーを付けてリクエストを送信すると、Accept-Language問題なく動作するように見えます。呼び出すLocaleContextHolder.getLocale()と、ヘッダーに設定したロケールが返されます。

URL パラメータを使用するlangと機能しません。

ロケールパラメーターも使用するように 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> 
4

1 に答える 1

1

試してみるために2つの提案があります。LocaleChangeInterceptorまず、 が呼び出されていることを確信していますか? 私が見た構成のほとんどは、 の id を持っていhandlerMappingますHandlerMapping。もう 1 つの提案は、別の id に関するものです。つまりsessionLocaleResolver、 であるべきだと思いますlocaleResolver。Spring がデフォルトでこれらの id 値またはクラス タイプに依存してこれらすべてを結び付けているかどうかはわかりませんが、試してみる価値はあります。

于 2013-08-26T03:15:23.960 に答える