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