spring3.1 mvc.在配置文件中配置了应答编码方式,正常的处理流程返回的应答字串没有中文乱码。如果处理业务中报异常,跳转到统一的业务处理函数处理异常后,再返回应答,此时的应答中文就成了乱码。所有的应答都是JSON字串。配置项:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
</list>
</property>
</bean>
<mvc:annotation-driven />统一异常处理函数:
/** 基于@ExceptionHandler异常处理,处理异常后返回JSON应答 */
@ExceptionHandler
@ResponseBody
public String exp(HttpServletRequest request, Exception ex) {
//request.setAttribute("ex", ex);
// 根据不同错误返回不同的错误消息
if(ex instanceof ParameterException) {
operlogger.error(ex.getMessage(), ex);
return getOutJson("-1", ex.getMessage(), "");
}else if(ex instanceof BusinessException) {
syslogger.error(ex.getMessage(), ex);
return getOutJson("-2", ex.getMessage(), "");
} else {
syslogger.error(ex.getMessage(), ex);
return getOutJson("-10", ex.getMessage(), "");
}
}
麻烦大家帮我看看,是哪出了问题。
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
</list>
</property>
</bean>
<mvc:annotation-driven />统一异常处理函数:
/** 基于@ExceptionHandler异常处理,处理异常后返回JSON应答 */
@ExceptionHandler
@ResponseBody
public String exp(HttpServletRequest request, Exception ex) {
//request.setAttribute("ex", ex);
// 根据不同错误返回不同的错误消息
if(ex instanceof ParameterException) {
operlogger.error(ex.getMessage(), ex);
return getOutJson("-1", ex.getMessage(), "");
}else if(ex instanceof BusinessException) {
syslogger.error(ex.getMessage(), ex);
return getOutJson("-2", ex.getMessage(), "");
} else {
syslogger.error(ex.getMessage(), ex);
return getOutJson("-10", ex.getMessage(), "");
}
}
麻烦大家帮我看看,是哪出了问题。
解决方案 »
- 关于WebService的问题,都进来看看吧,不知道你们遇到过没有! 头都被它整大啦。
- 关于表头和表尾 整合一起,等要用就调用的方法(wap2.0)
- 求ext中window最小化到托盘的代码
- 一个关于spring的applicationcontext的问题
- 向各位高手请教:如何在页面中点播视频
- weblogic如何应用
- 用什么方法可以快速方便的建立带数据库的企业网站??
- 在网页中嵌入applet程序为什么不能执行?
- hibernate 建表的问题
- 如果在同一个.JSP文件中处理多个表单提交的内容,判断语句应该是什么样的?
- Java使用Timer定时器效率低下,执行上万数据
- 关于request.getParamater("name")若干疑问,html5新特性placeholder?
2013-01-08 16:27:07,953 DEBUG [http-bio-8080-exec-19] (AbstractMessageConverterMethodProcessor.java:139) - Written [{"erroCode":"0","success":true,"content":"CAN文件上传成功"}] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@18fcb66]报异常处理后返回应答:
2013-01-08 16:29:42,109 DEBUG [http-bio-8080-exec-11] (AbstractMessageConverterMethodProcessor.java:139) - Written [{"erroCode":"-1","success":true,"failReason":"HTTP错误大全.txt文件类型不匹配"}] as "text/html" using [org.springframework.http.converter.StringHttpMessageConverter@ffeba4]看到的差别就是as "text/html" 没有 charset=UTF-8"