Я хочу сделать PUT-вызов весной.ни @RequestBody, ни @RequestParam работа
это мой код контроллера:
@RequestMapping(value = "/magic", method = RequestMethod.PUT)
TodoDTO magic(@RequestBody String id){
return service.magic(id);
}
, потому что я хочу, чтобы передать строку идентификатора в вызове.
проблема, я получаю эту
{
"timestamp": 1486644310464,
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.NullPointerException",
"message": "{\n\t\"id\":\"589c5e322abb5f28631ef2cc\"\n}",
"path": "/api/todo/magic"
}
если я изменить код так:
@RequestMapping(value = "/magic", method = RequestMethod.PUT)
TodoDTO magic(@RequestParam(value = "id") String id){
return service.magic(id);
}
я получить
{
"timestamp": 1486644539977,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MissingServletRequestParameterException",
"message": "Required String parameter 'id' is not present",
"path": "/api/todo/magic"
}
я сделать такой же вызов, пута по ссылке http://localhost:8080/api/todo/magic с телом
{
"id":"589c5e322abb5f28631ef2cc"
}
, который является идентификатором одного объекта в моем db.
мой вопрос в том, как я могу достичь своей цели? если я прохожу Пары в ссылке, как API/Todo/магия/589c5e322abb5f28631ef2cc, с @PathVariable, он работает
_ "с @PathVariable, он работает" _ Затем используйте его. И не используйте 'PUT', если вы не отправляете данные. – zeroflagL
@zeroflagL это не шаблон для отправки данных в URL? это был просто тест, это причина метода «не делать ничего» :) – AvramPop
Если точкой вашего метода является возврат элемента с определенным идентификатором или на его основе, то идентификатор - это не данные , Если идентификатор фактически является данными, тогда вы правы, и его следует отправить как тело. Но на основании сообщения об ошибке вы этого не сделали. – zeroflagL