2015-12-11 205 views
0

當我嘗試使用微信公共平臺時,微信服務器將調用我的一個API,我需要返回一個令牌來驗證我的身份。但是,當我直接返回令牌時,weChat服務器會提示驗證錯誤。@ResponseBody和HttpServletResponce之間有什麼區別

@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; 
    } 

我用Google搜索,並得到了使用@Responsebody時,春消息寫入響應的主體。 那麼他們之間有什麼區別?爲什麼第一種方法是錯誤的?

+0

responseBody只是響應的主體,而'HttpServletResponce'包含整個響應,例如標題,Cookie,正文等。 –

+0

發佈的代碼是否正確?兩種方法都有@ResponseBody? –

回答

1

HTTP響應由一個狀態碼,一些標題和一個正文組成。使用@ResponseBody意味着你的方法給出了正文的內容,沒有別的。使用HttpServletResponse使您的方法可以設置響應的所有方面,但是使用起來有點不方便。

0

你應該使用ResponseBody來返回一些數據結構。由於您只需要「唯一」字符串,因此您應該將方法的返回類型更改爲從String中除去並移除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(); 
} 
相關問題