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(), "");
}
}
麻烦大家帮我看看,是哪出了问题。

解决方案 »

  1.   

    不报异常时,返回应答是这样的:
    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"
      

  2.   

     <value>text/html;charset=UTF-8</value>加上这个