{channel.title!channel.name} - 楚淮公司周东林

java自带HttpURLConnection方法POST请求传JSON

传JSON或者传String跟本身代码里面传的数据类型没关系,主要要注意如果参数中文需要转换成UTF-8编码,还有 Content-Type 的设置。


贴出主要代码

 

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
// 设置通用的请求属性
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Charset", "UTF-8");
connection.setUseCaches(false);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();

其中

POST 是请求方式,Content-Type 决定提交的是 JSON 还是 String, 提交JSON就要 setRequestProperty("Content-Type", "application/json")

默认使用的是 application/x-www-form-urlencoded

如果接口返回的值不是想要的结果,可能传入的字符集有问题。

//建立输入流,向指向的URL传入参数
DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
System.out.println(params);
dos.write(params.getBytes("UTF-8"));
dos.flush();
dos.close();
主要这句dos.write(params.getBytes("UTF-8"));要设置字符集。

---------------------------------------------------------------------------------------------------------------------

Content-Type​ 究竟应该用application/x-www-form-urlencoded还是application/json?

 

答案是跟我们提交的参数格式有关。
如果是通过页面表单方式提交,那就是"application/x-www-form-urlencoded";如果是json(要反序列化成字符串),那就是"application/json"。
对于"application/x-www-form-urlencoded",其参数组织形式,是键值对,类似于get方式的参数形式:name=张三&sex=男&tel=5354169,而json大家都知道,是这样的:
 
{
    name:"张三",
    sex:"男",
    tel:"5354169",
}
 

所以,如果你传递的参数是json ,Content-Type 就设置 webClient.Headers.Add("Content-Type", "application/json");

​如果你是通过页面表单提交类似于get方式的参数形式:name=张三&sex=男&tel=1234582 就设置webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

​默认的使用 application/x-www-form-urlencoded

 

 


浏览.发表于:2018-10-27 00:33:25