在构造网络请求参数的时候经常需要动态添加某个参数,该参数的值还是一个对象。 例如自己在获取文件列表的时候,最开始只传了当前页码pageNo
和每页条目的数量pageSize
,这时报文会打印的参数如下:
{"pageSize":10,"pageNo":1}
后来又增加了一个排序的需求, 后端需要客户端多传一个参数nameValuePairs
, 它的值是一个对象, 期望的结果如下:
{"sortMapJson":{"file_name":false},"pageSize":10,"pageNo":1}
自己使用JSONObject构造了sortMapJson
参数, 代码如下:
HashMap<String, Object> params = new HashMap<>();
params.put("pageNo", pageNo);
params.put("pageSize", pageSize);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("file_name", true);
params.put("sortMapJson", jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
然而打印的参数并不是自己想象中的那样, value的外层多封装了一个nameValuePairs
, 如下所示
{"sortMapJson":{"nameValuePairs":{"file_name":true}},"pageSize":10,"pageNo":1}
为什么会是这样呢? 这是因为我们使用了JSONObject
, 实际上应该使用JsonObject
。 JSONObject
属于org.json
包中的类, JsonObject
属于com.google.gson
包中的类。 正确的写法如下:
HashMap<String, Object> params = new HashMap<>();
params.put("pageNo", 1);
params.put("pageSize", 10);
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("file_name", false);
params.put("sortMapJson", jsonObject);