Как принять 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 шт):

Автор решения: dmtr

Написать 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; }
}
→ Ссылка
Автор решения: ivvasch

Всем привет, была похожая проблема. Ко мне приходит json с обычными полями, которые мапятся на string, а одно из полей это json, который мы не можем смапить на какой-нибудь объект, т.к. там могут быть разные ключи и их количество. В качестве решения я стал использовать

public abstract class JsonNode

из пакета:

package com.fasterxml.jackson.databind;

он спокойно принимает любой json, а дальше Вы его можете парсить так, как Вам удобно.

→ Ссылка