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