今天在研究微信公眾平台 自動接收發送消息的時候,在如下代碼:
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個小時的時間。。。。菜鳥傷不起啊