Spring MVC - запрос, отправленный клиентом, был синтаксически неверным

У меня простой контроллер:

@RequestMapping(method = { RequestMethod.POST })
public ResponseEntity<MyResponse> print(@RequestBody final RequestModel request) throw ApiException {
    return null;
}

И в моей RequestModel:

class RequestModel {
    private String name;
    private CustomData data;
}

CustomData:

class CustomData {
    private String data;
}

Когда я делаю запрос POST без поля «данные», он работает. Но если я добавлю поле «данные», я получу 400. Запрос, отправленный клиентом, был синтаксически неверен.

Что такое private data? Это класс? Вы имеете в виду private String data;?

user7294900 16.09.2018 16:32

Мое плохое, да, это строка

jbpark 16.09.2018 16:35

Ате отправляет json? Покажите тело json.

bpedroso 16.09.2018 16:39

{name: "test", data: {data: "test"}}}

jbpark 16.09.2018 16:40

Поместите двойные кавычки в имена полей и удалите последние скобки.

bpedroso 16.09.2018 16:47

Пробовал, но получаю ту же ошибку

jbpark 16.09.2018 16:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
42
2

Ответы 2

О, не знаю, если вы написали весь код, но вам следует реализовать сериализуемые и написать сеттеры и геттеры.

Но, отвечая на ваш вопрос, вы должны аннотировать свои поля с помощью @JsonProperty, чтобы указать требуемый флаг.

Я уже реализовал сериализуемые и имею геттеры / сеттеры.

jbpark 16.09.2018 16:43

Ваш опубликованный JSON должен быть примерно таким:

{
   "name":"Luke",
   "data": {
         "data":"I am your father"
    }
}

OBS: если вы используете Postman, установите header: key: Content-Type, value: application / json

Вы должны указать конечную точку: Пример :

@PostMapping("/data")

Вместо того

@RequestMapping(method = { RequestMethod.POST })

Если вы используете порт по умолчанию, попробуйте еще раз отправить сообщение:

http://localhost:8080/data

OBS: RequestModel и CustomerData должны иметь геттеры и сеттеры.

Другие вопросы по теме