Как принять JSON объект в REST Controller в Spring boot
У меня есть JSON объект. Как я могу его распарсить в REST Controller?
JSON
{
"sections": [
{
"title": "Test 1",
"fields": [
{
"name": "1"
}
]
},
{
"title": "Test 2",
"fields": [
{
"name": "11"
},
{
"name": "22"
}
]
},
{
"title": "Test 3",
"fields": [
{
"name": "111"
},
{
"name": "222"
},
{
"name": "333"
}
]
}
]
}
Ответы (2 шт):
Написать DTO класс, отражающий структуру вашего JSON-а.
В сигнатуру метода контроллера добавить @RequestBody ClassDTO body, где ClassDTO - ваш DTO класс.
Далее в теле метода пишете что-то вроде
@PostMapping
public void getJson(@RequestBody ClassDTO body) {
if (body != null) {
ClassDto json = body;
// и дальше работаете с объектом...
}
}
DTO:
@JsonIgnoreProperties(ignoreUnknown = true)
public class JsonDTO {
private Section[] sections;
public Section[] getSections() { return sections; }
public void setSections(Section[] value) { this.sections = value; }
}
Эти классы отдельно:
Section:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Section {
private String title;
private Field[] fields;
public String getTitle() { return title; }
public void setTitle(String value) { this.title = value; }
public Field[] getFields() { return fields; }
public void setFields(Field[] value) { this.fields = value; }
}
Field:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Field {
private String name;
public String getName() { return name; }
public void setName(String value) { this.name = value; }
}
Всем привет, была похожая проблема. Ко мне приходит json с обычными полями, которые мапятся на string, а одно из полей это json, который мы не можем смапить на какой-нибудь объект, т.к. там могут быть разные ключи и их количество. В качестве решения я стал использовать
public abstract class JsonNode
из пакета:
package com.fasterxml.jackson.databind;
он спокойно принимает любой json, а дальше Вы его можете парсить так, как Вам удобно.