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){
    ……
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章