首页 > 解决方案 > 使用 int 数组将 JSON 序列化为 Spring RequestBody

问题描述

我有一个将 a 指定@RequestBody为参数的 Spring 控制器方法。请求正文的类看起来像这样

public class myClass {
     CustomObject obj
     int x
     int y
     int[] values
     Character c

     //getters and setters
}

我正在编写单元测试,并且无法int[] values通过普通的 JSONobject 设置元素。如果可能,我宁愿不使用 JSONArray,因为其他元素通过 JSONObject 很好地传递,如下所示:

JSONObject requestParams = new JSONObject();

if(obj != null)
     requestParams.put("obj", obj);

if(c != null)
     requestParams.put("c", c);

我已经尝试requestParams.put("values", Arrays.toString(values))将值定义为int[] values = new int[]{10,20,30,40,50,60,10,15,20,30,40,55}但在我尝试发送请求时仍然收到 400 错误,只有当values它不为空时。

如何通过 JSONObject 将此值列表发送到 RequestBody 类?

标签: javajsonspring-boot

解决方案


你可以像下面这样使用:

//prepare list 
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
...
list.add(100);

JSONArray array = new JSONArray();

for (int i = 0; i < list.size(); i++) {
array.put(list.get(i));
}
JSONObject obj = new JSONObject();

try {
obj.put("values", array);
}catch(JSONException ee){

 }

以上是您可以减少样板代码的简化方式。


推荐阅读