解决方法如下:
/** * 微信业务处理核心(POST) * @param request * @param response * @return */ @RequestMapping(method = RequestMethod.POST,produces = "text/plain;charset=UTF-8") @ResponseBody public String service(HttpServletRequest request) { //1. 解析微信报文 //Map<String, Object> msgMap = WechatMsgUtil.parseXml(request); String wechatNum = "gh_e136c6e50636"; String openId = "oMgHVjngRipVsoxg6TuX3vz6glDg"; //2. 微信报文去重处理(2.1---2.2 二选一) if (IS_RESPONSE) { //2.1 被动响应用户消息 //2.1.1 去重验证 //测试被动响应微信消息---XML格式 String content = "返回中文是否有乱码"; String transXml = WechatMsgUtil.responseText(wechatNum,openId, content); return transXml; } else { //2.2 使用客服接口发送消息 return ""; } }
注意:produces = "text/plain;charset=UTF-8" 设置响应MIME类型并设置字符编码为UTF-8
以下是测试过程:
<html> <head> <title></title> </head> <body> <form name="wechatPostForm" action="http://localhost:8080/*******/wechat" method="post"> <input type="submit" value="测试" /> </form> </body> </html>
返回结果:
<xml> <ToUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]></ToUserName> <FromUserName><![CDATA[gh_e136c6e50636]]></FromUserName> <CreateTime>1430707530</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[返回中文是否有乱码]]></Content> </xml>
如果我们去掉produces = "text/plain;charset=UTF-8"配置信息
返回结果:
<xml> <ToUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]></ToUserName> <FromUserName><![CDATA[gh_e136c6e50636]]></FromUserName> <CreateTime>1430707633</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[?????????]]></Content> </xml>
以后使用SpringMvc开发诸如响应XML、响应JSON、响应文本字符串时,一定要注意响应中包含中文的问题。