今天在使用HttpClient進行POST請求調用別人的接口一直失敗,查看請求報文與接口文檔完全一致;最後求助於接口開發側,抓取請求報文發現,他們接收到的JSON串後面多了個“=”號;然後通過在網上查找,問題解決。
原因:
無論是使用HttpClient進行POST,還是前端使用ajax向Java後臺發送Json數據,默認請求的ContentType 是 application/x-www-form-urlencoded;charset=UTF-8 ,都會導致後臺接收到的Json數據末尾多一個 “=”。
application/x-www-form-urlencoded;charset=UTF-8
是一種鍵值對結構,傳輸時將JSON內容當作了key,value爲空,因此收到的報文Json的末尾多出一個等號。而Http接口提供者設置了ContentType類型,比如在Controller層的方法上添加了“@Produces("application/json;charset=UTF-8")”
解決方案:
請求時,將ContentType 改成 application/json;charset=utf-8即可解決問題。
例:
HttpPost httppost = new HttpPost(url); // 創建http post
StringEntity stringEntity = new StringEntity(data, "utf-8"); // 創建請求參數
stringEntity.setContentType("application/json");
httppost.setEntity(stringEntity);
……