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码都是参数封装错误。

问题解决

经过各种方式尝试最终发现只需将代码中的 Content-Type 类型由 application/json; charset=utf-8 改为 application/json 后,请求神奇的通了。
但是 charset = utf-8 的作用指定要以JSON格式的内容,以UTF-8字符编码进行编码,但指定编码对于JSON有点多余,因为JSON的默认编码是UTF-8。所以有点儿莫名其妙,也可能是我没有真正懂得这个参数的含义,不过大概率是因为接收方设置问题。

你可能感兴趣的:(日常错误,java)