使用HttpClient进行POST请求时发现的一个坑(收到的JSON串后面多了个“=”)

        今天在使用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);

……

 

 

你可能感兴趣的:(常见问题解决)