問題

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>