StringEntity 和 UrlEncodedFormEntity 的区别

心已赠人 2022-01-29 01:37 209阅读 0赞
  1. HTTPClient进行body传参,要使用StringEntity,而不要使用UrlEncodedFormEntity
  2. 原因:UrlEncodedFormEntity会以字符串键值对形式传给后台,即:{"a":"value1", "b":"value2"},传给java方法,接收到的参数是:a=value1&b=value2,即它不支持json参数传递;
  3. StringEntity传参,后台接收到的依然是 {"a":"value1", "b":"value2"},即StringEntity能传递json,当然,如果你传递的就是一个普通的字符串,StringEntity也是支持的。
  4. StringEntity传参:
  5. String param = "{\"a\":\"value1\", \"b\":\"value2\"}";
  6. httpPost.setEntity(new StringEntity(jsonParams, ContentType.create("application/json", "UTF-8")));
  7. //后台方法的参数可以直接是一个对象
  8. @PostMapping(value = "/methodxxx")
  9. public Response methodxxx(@RequestBody Paramxxx param){
  10. ……
  11. }
  12. //paramxxx对象类:
  13. class Paramxxx{
  14. private String a;
  15. private String b;
  16. //getter
  17. ……
  18. //setter
  19. ……
  20. }

UrlEncodedFormEntity传参:

  1. Map<String,String> paramsMap = new HashMap<>();
  2. paramsMap.put("a","value1");
  3. paramsMap.put("b","value2");
  4. if(null != paramsMap && paramsMap.size() > 0) {
  5. List<NameValuePair> nvps = new ArrayList<>();
  6. for (String key : paramsMap.keySet()) {
  7. nvps.add(new BasicNameValuePair(key, String.valueOf(paramsMap.get(key))));
  8. }
  9. httpPost.setEntity(new UrlEncodedFormEntity(nvps, Const.CHARSET));
  10. }
  11. //后台接收的参数
  12. @PostMapping(value = "/methodxxx")
  13. public Response methodxxx(String a, String b){
  14. ……
  15. }

发表评论

表情:
评论列表 (有 0 条评论,209人围观)

还没有评论,来说两句吧...

相关阅读

    相关 "&""&&"、"|""||"区别

    一、逻辑运算: 与操作:“&”表示所有的判断条件都要进行判断,“&&”如果前面的条件返回的是false,那么后面的条件将不再执行,最终的结果就是false。 或操作:“

    相关 &&&区别

    &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 fal