今天在研究微信公众平台 自动接收发送消息的时候,在如下代码:
public String processRequest(HttpServletRequest request) { String respMessage = null; try { System.err.println(inputStream2String(request.getInputStream()).replaceAll("\n\r","").replaceAll("\n","")); // xml请求解析 Map<String, String> requestMap = MessageUtil.parseXml(request); // 发送方帐号(open_id) String fromUserName = requestMap.get("FromUserName"); // 公众帐号 String toUserName = requestMap.get("ToUserName"); // 消息类型 String msgType = requestMap.get("MsgType"); TextMessage textMessage = new TextMessage(); textMessage.setToUserName(fromUserName); textMessage.setFromUserName(toUserName); textMessage.setCreateTime(new Date().getTime()); textMessage.setMsgType("text"); textMessage.setFuncFlag(0); // 文本消息 System.err.println("msgType:"+msgType); System.err.println("textMessage.getMsgType():"+textMessage.getMsgType()); if (msgType.equals(textMessage.getMsgType())) { System.err.println("2"); // 接收用户发送的文本消息内容 String content = requestMap.get("Content"); if ("1".equals(content)) { textMessage.setContent("1是很好的"); // 将文本消息对象转换成xml字符串 respMessage = MessageUtil.textMessageToXml(textMessage); } else if ("2".equals(content)) { textMessage.setContent("我不是2货"); // 将文本消息对象转换成xml字符串 respMessage = MessageUtil.textMessageToXml(textMessage); } } } catch (Exception e) { e.printStackTrace(); } System.err.println("3"); return respMessage; }
测试文本如下:
String s = "<xml><ToUserName><![CDATA[gh_41fbf927ea91]]></ToUserName>" + "<FromUserName><![CDATA[oehO4twMrDrZG3sZ1aeevO_f1Rb4]]></FromUserName>" + "<CreateTime>1400915169</CreateTime>" + "<MsgType><![CDATA[text]]></MsgType>" + "<Content><![CDATA[1]]></Content>" + "<MsgId>6016884835525482273</MsgId>" + "</xml>";
本地调试什么的,都挺好的,就是一发布到服务器就报了Premature end of file 的错误,后来上网上找了,用了各种办法,最后都不行,其中也看到了http://blog.sina.com.cn/s/blog_409994cb0100oj2t.html的帖子说的,仔细读取了博客,最后把“System.err.println(inputStream2String(request.getInputStream()).replaceAll("\n\r","").replaceAll("\n","")); ”这句测试代码删掉,然后就好了。。。。
我真想说,CNMLGB的,就这一个注释,浪费了我将近3个小时的时间。。。。菜鸟伤不起啊