StringEntity和UrlEncodedFormEntity的区别

在java开发中,总是有些机会会调用到别人接口,这个时候你就要选择,是选择使用JDK下的HttpUrlConnection还是选择httpclient

至于具体的区别我在这里提一下:

HttpUrlConnection :用于第三方请求,一些简单的请求传入参数少的情况下,httpurlconnection没问题;
httpclient:urlconnection做的事httpclient都能做,只是在登陆请求或者权限验证时,到时候就会涉及到session和cookie的处理,这个时候用urlconnection就会比较麻烦,简而言之,httpclient是urlconnection的升级版

StringEntity和UrlEncodedFormEntity的区别
既然选择用到了httpclient,那么在httppost时就要传入entity参数体,在以前的版本下只能使用urlEncodedformEntity的参数体
如下:

HttpPost post = new HttpPost();
// 你要传入的参数
Map<String, String> params = new HashMap<>();
// urlEncodedForm的参数要给入NameValuePair类型的参数
List<NameValuePair> nvps = new ArrayList<>();
for (String key : params.keySet()) {
	nvps.add(new BasicNameValuePair(key, params.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(nvps,"UTF-8"));

这时在请求时参数会自动变为key1=value1&key2=value2
httppost的请求头里的contentType也会自动变为application/x-www-form-urlencoded

这里就是我们通常所说的在请求中会有两种常用的请求,注意我没有把所有的请求列出来,一个是键值对类型,一个是json参数

在这里那么自然就是键值对类型了

那么这就是UrlEncodedFormEntity的限制。

在今后的开发中我们难免会碰到不一样的请求,有的请求不允许你使用键值对类型,那么此时作为urlEncodedFormEntity的升级版StringEntity出现了。

代码如下:

HttpPost post = new HttpPost();
// 你要传入的json参数
String json = "";
StringEntity entity = new StringEntity(json,"UTF-8");
// 当然这里也可以使用application/x-www.form-urlencoded类型
entity.setContentType("application/json");
entity.setContentEncoding("UTF-8");
post.setEntity(entity);

不会像urlEncodedFormEntity那么死板,StringEntity既能够灵活的选择键值对类型或者json请求体类型,只要参数与contentType的类型对应,那么可以起飞辣~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值