当我尝试使用Micro Message Public Platform时,weChat服务器将调用我的一个API,我需要返回一个令牌来验证我的身份。但是,当我像这样直接返回令牌时,weChat服务器会警告验证是错误的。
@RequestMapping(value="/userFollow", method= RequestMethod.GET)
@ResponseBody
public String weChatToken(HttpServletRequest request,String signature,String timestamp,String nonce,String echostr,HttpServletResponse response) throws IOException, DocumentException {
String result=weChatService.checkSignature(signature,timestamp,nonce,echostr);
return result;
}
然后我改变了我的代码如下。这一次,验证是正确的。
@RequestMapping(value="/userFollow", method= RequestMethod.GET)
@ResponseBody
public String weChatToken(HttpServletRequest request,String signature,String timestamp,String nonce,String echostr,HttpServletResponse response) throws IOException, DocumentException {
String result=weChatService.checkSignature(signature,timestamp,nonce,echostr);
PrintWriter pw=response.getWriter();
pw.write(result);
pw.flush();
return null;
}
我用谷歌搜索并在使用@Responsebody
时得到它,Spring将消息写入响应主体。
那么它们之间的区别是什么?为什么第一种方式错了?
答案 0 :(得分:1)
HTTP响应由状态代码,一些标头和正文组成。使用@ResponseBody意味着您的方法提供正文的内容,而不是其他内容。使用HttpServletResponse可以使您的方法设置响应的所有方面,但使用起来有点不方便。
答案 1 :(得分:0)
您应该使用ResponseBody返回一些数据结构。因为你需要"只有"字符串,您应该将方法的返回类型从String更改为void并删除ResponseBody注释。
@RequestMapping(value="/userFollow", method= RequestMethod.GET)
public void weChatToken(HttpServletRequest request,String signature,String timestamp,String nonce,String echostr,HttpServletResponse response) throws IOException, DocumentException {
String result=weChatService.checkSignature(signature,timestamp,nonce,echostr);
PrintWriter pw=response.getWriter();
pw.write(result);
pw.flush();
}