【发布时间】:2017-02-09 12:50:51
【问题描述】:
我想在春天进行 PUT 调用。
这是我的控制器代码:
@RequestMapping(value = "/magic", method = RequestMethod.PUT)
TodoDTO magic(@RequestBody String id){
return service.magic(id);
}
因为我想在调用中传递一个 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上的一个PUT 与身体
{
"id":"589c5e322abb5f28631ef2cc"
}
这是我的数据库中一个对象的 id。
我的问题是,我怎样才能实现我的目标?如果我通过链接中的参数,例如 api/todo/magic/589c5e322abb5f28631ef2cc,使用@PathVariable,它可以工作
【问题讨论】:
-
“用@PathVariable,它可以工作” 然后使用它。如果不发送数据,请不要使用
PUT。 -
@zeroflagL 在 URL 中发送数据不是反模式吗?这只是一个测试,这就是什么都不做的方法的原因:)
-
如果您的方法的目的是返回带有或基于某个 id 的项目,那么 id 不是真正的数据。如果 id 实际上是数据,那么你是对的,它应该作为正文发送。但根据错误消息,您没有这样做。
-
@zeroflagL 那么你对数据的理解是什么?图片?
标签: java spring spring-mvc spring-restcontroller