開発者ドキュメント

HTTP受け入れヘッダーを変更できません – 別のロケール解決戦略を使用してください

問題

Spring MVCアプリケーションでは、 ”

org.springframework.web.servlet.i18n.LocaleChangeInterceptor

“でロケールを変更している間、次のエラーが発生します

java.lang.UnsupportedOperationException:
     Cannot change HTTP accept header - use a different locale resolution strategy
     ...AcceptHeaderLocaleResolver.setLocale(AcceptHeaderLocaleResolver.java:45)

解決策

SpringのMVCアプリケーションでは、SpringのLocaleResolverを設定しないと、デフォルトの

AcceptHeaderLocaleResolver

が使用されますが、これはロケールの変更を許可しません。これを解決するには、

SessionLocaleResolver

BeanをSpring Bean設定ファイルで宣言してみてください。ほとんどの場合スーツにしてください。

<beans ...

    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en"/>
    </bean>

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

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

</beans>
モバイルバージョンを終了