1、java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy 异常
由于第一次配置时,在Spring中配置了拦截器
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<!-- 下列所有的拦截器顺序执行 -->
<property name="interceptors">
<list>
<ref bean="adminContextInterceptor"/>
<ref bean="adminLocaleIntercept"/>
<!-- <ref bean="test" /> -->
</list>
</property>
</bean>
其中 adminLocaleIntercept为一个语系转换
<bean id="adminLocaleIntercept" class="com.zjt.util.web.interceptor.AdminLocaleInterceptor">
<property name="language" value="en_US" />
</bean>
当类中执行
LocaleResolver localeResolver = RequestContextUtils
.getLocaleResolver(request);
logger.debug("当前语系为:{}",this.language);
//logger.debug(handler.toString());
if (localeResolver == null) {
throw new IllegalStateException(
"No LocaleResolver found: not in a DispatcherServlet request?");
}
String newLocale = this.language;//site.getLocaleAdmin();
LocaleEditor localeEditor = new LocaleEditor();
localeEditor.setAsText(newLocale);
localeResolver.setLocale(request, response, (Locale) localeEditor.getValue());
系统报以上错误;
因此需要在Spring的配置文件中加入以下配置
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="clientlanguage"/>
<property name="cookieMaxAge" value="-1"/>
</bean>
时,错误消失。
CookieLocaleResolver通过浏览器的cookie设置和取得Locale对象。这种策略在应用程序不支持会话或者状态必须保存在客户端时有用。
请在ApplicationContext中声明这个类并使用它。值得注意的是,可以选择配置cookie的名称,但是该类提供了一个明智的默认值。如果希望清除Locale cookie,只需调用setLocale()并传递一个null locale即可。