Подтвердить что ты не робот

Используйте @RequestBody с дополнительным телом в последнем Spring v4

Как сделать тело необязательным при вызовах API REST при использовании аннотации @RequestBody в Spring?

В последней версии Spring, если вы используете аннотацию @RequestBody, это заставляет клиента все время отправлять тело, не делая его необязательным.

Я попытался @RequestBody (required=false) но это не сработало, и все же мой запрос имеет значение null.

Как мне преобразовать запрос в нужный объект, не делая тело обязательным?

Например:

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
    // ...
}

Здесь я хочу добавить сотрудника, используя POST, но без тела. Как я могу это сделать? Spring последняя версия выдает ошибку "тело отсутствует", если я отправляю пустое тело...

4b9b3361

Ответ 1

@Santosh, я не уверен, какой требуемый аргумент вы имеете в виду. Майк уже упомянул, что он пытался использовать @RequestBody (required=false), и запрос все еще был нулевым. Может быть, вы можете подробнее рассказать и дать пример.

@Mike, возможно, вы можете попробовать иметь другой отдельный конвертер, который будет служить вашей цели.

Примечание. Я заметил ту же проблему с Spring v4.1.6, и Майк мог использовать это, поскольку он упомянул, что использует последнюю версию.

Ответ 2

Я предполагаю, что вы используете весеннюю версию выше 3.2, так как была проблема с версией. У @RequestBody должен быть обязательный параметр, чтобы тело запроса было необязательным

Взгляните на следующую ссылку Spring @RequestBody Anotation

@RequestBody Body принимает и аргумент обязателен, что по умолчанию верно. Указание на false поможет вам

требуется публичное аннотация

Требуется ли содержание тела. Значение по умолчанию - true, что приводит к возникновению исключения в случае отсутствия содержимого тела. Установите это значение в false, если вы предпочитаете, чтобы значение null передавалось, когда содержимое тела имеет значение null

Ответ 3

Вы можете использовать java.util.Optional:

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
    // ...
}