Spring+FreeMarker 框架搭建学习过程

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即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值