StringEntity 和 UrlEncodedFormEntity 的区别
HTTPClient进行body传参,要使用StringEntity,而不要使用UrlEncodedFormEntity
原因:UrlEncodedFormEntity会以字符串键值对形式传给后台,即:{"a":"value1", "b":"value2"},传给java方法,接收到的参数是:a=value1&b=value2,即它不支持json参数传递;
而StringEntity传参,后台接收到的依然是 {"a":"value1", "b":"value2"},即StringEntity能传递json,当然,如果你传递的就是一个普通的字符串,StringEntity也是支持的。
StringEntity传参:
String param = "{\"a\":\"value1\", \"b\":\"value2\"}";
httpPost.setEntity(new StringEntity(jsonParams, ContentType.create("application/json", "UTF-8")));
//后台方法的参数可以直接是一个对象
@PostMapping(value = "/methodxxx")
public Response methodxxx(@RequestBody Paramxxx param){
……
}
//paramxxx对象类:
class Paramxxx{
private String a;
private String b;
//getter
……
//setter
……
}
UrlEncodedFormEntity传参:
Map<String,String> paramsMap = new HashMap<>();
paramsMap.put("a","value1");
paramsMap.put("b","value2");
if(null != paramsMap && paramsMap.size() > 0) {
List<NameValuePair> nvps = new ArrayList<>();
for (String key : paramsMap.keySet()) {
nvps.add(new BasicNameValuePair(key, String.valueOf(paramsMap.get(key))));
}
httpPost.setEntity(new UrlEncodedFormEntity(nvps, Const.CHARSET));
}
//后台接收的参数
@PostMapping(value = "/methodxxx")
public Response methodxxx(String a, String b){
……
}
还没有评论,来说两句吧...