日常错误|postman能正常请求但java程序请求返回400

问题背景 程序需要调用第三方的接口通过http方式,调用方式及为post请求方式传入json串的格式,通过程序调用后发现是http1.1格式的,然后返回400状态码。以为是参数json有问题,但同样的参数拷贝后拿到postman之行则可以成功。
问题复线 问题代码如下:

public static void testHttp(String json){ HttpClient client= new DefaultHttpClient(); HttpPost request = new HttpPost("http://method.com/skin/api/v01"); request.setHeader("Content-Type","application/json; charset=utf-8"); try { request.setEntity(new StringEntity(json,Charset.forName("UTF-8"))); HttpResponse resp = client.execute(request); HttpEntity entity = resp.getEntity(); System.out.println(entity.toString()); if(entity!=null){ //解析返回数据 String result = EntityUtils.toString(entity,"UTF-8"); System.out.println(result); } } catch (Exception e) { e.printStackTrace(); } }

如上代码,发送请求后发现是http1.1格式的,然后返回400 code码,一般400 code码都是参数封装错误。
问题解决 【日常错误|postman能正常请求但java程序请求返回400】经过各种方式尝试最终发现只需将代码中的 Content-Type 类型由 application/json; charset=utf-8 改为 application/json 后,请求神奇的通了。
但是 charset = utf-8 的作用指定要以JSON格式的内容,以UTF-8字符编码进行编码,但指定编码对于JSON有点多余,因为JSON的默认编码是UTF-8。所以有点儿莫名其妙,也可能是我没有真正懂得这个参数的含义,不过大概率是因为接收方设置问题。

    推荐阅读