Используйте @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 последняя версия выдает ошибку "тело отсутствует", если я отправляю пустое тело...
Ответы
Ответ 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){
// ...
}