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