Сериализация JSON в Spring RequestBody с массивом int - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть метод контроллера Spring, в котором в качестве параметра указывается @RequestBody. Класс для тела запроса выглядит примерно так:

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 не равен нулю.

Как отправить этот список значений в класс RequestBody через JSONObject?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Вы можете использовать, как показано ниже:

//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){

 }

выше - это упрощенный способ уменьшить код котельной плиты.

1 голос
/ 11 февраля 2020

вы не можете разобрать массив в объект, попробуйте разобрать в ArrayNode используя ObjectMapper:

int[] values = new int[]{10,20,30,40,50,60,10,15,20,30,40,55}; ObjectMapper mapper = new ObjectMapper(); ArrayNode node = mapper.valueToTree(values);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...