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>
リファレンス
ドキュメンテーション]