Spring post方法“缺少所需的请求正文”
Posted
技术标签:
【中文标题】Spring post方法“缺少所需的请求正文”【英文标题】:Spring post method "Required request body is missing" 【发布时间】:2019-03-29 04:24:51 【问题描述】:@PostMapping(path="/login")
public ResponseEntity<User> loginUser(@RequestBody Map<String, String> userData) throws Exception
return ResponseEntity.ok(userService.login(userData));
我在 UserController 中有这个方法用于登录。问题是当我尝试发出登录请求时出现此错误:
"timestamp": "2018-10-24T16:47:04.691+0000",
"status": 400,
"error": "Bad Request",
"message": "Required request body is missing: public org.springframework.http.ResponseEntity<org.scd.model.User> org.scd.controller.UserController.loginUser(java.util.Map<java.lang.String, java.lang.String>) throws java.lang.Exception",
"path": "/users/login"
【问题讨论】:
嗨!您传递给 API 的主体是什么? Body中需要传递邮箱和密码吗? 视情况而定,你可以双向进行,我的答案是:D 【参考方案1】:如果是 POST 请求,您必须在正文中将其作为 JSON 传递。
【讨论】:
将媒体类型Text
更改为 JSON
,就像我在上图中所做的那样。【参考方案2】:
发生这种情况是因为您没有将正文传递给您的服务器。 正如我在您的屏幕截图中看到的那样,您将电子邮件和密码作为 ResquestParam 传递。
要处理此值,您可以执行以下操作:
@PostMapping(path="/login")
public ResponseEntity<User> loginUser(@RequestParam("email") String email, @RequestParam("password") String password)
//your imp
为了接受空正文,您可以在 RequestBody 注释中使用 required
参数:
@RequestBody(required = false)
但这并不能解决您的问题。将作为 RequestParam 接收。
如果您想使用 RequestBody,您应该在 body 中传递电子邮件和密码。
【讨论】:
要在 POST 中接收 RequestParam 可以参考这个问题:***.com/questions/17964841/… 你也可以通过 body 传递数据,这也很有意义,因为它是一个 post 请求。 Type 的 @RequestBody 不起作用,但实际的 Type 参数有效吗?想知道为什么? 这个解决方案对我有用,请确保在邮递员上您也发送带有参数的帖子【参考方案3】:您需要在 Body 中以 JSON 格式发送数据
"email":"email@email.com", "password":"tuffCookie"
【讨论】:
@lonut click raw @lonut 点击文本组合并更改为 json【参考方案4】:我遇到了类似的问题,在我的 Spring Boot 服务中遇到了这个错误
HttpMessageNotReadableException:缺少所需的请求正文:...
我的问题是,当我从 Postman 发出请求时,未选中 "Content-Length" 标头,因此服务没有考虑请求正文。
【讨论】:
你拯救了我的一天以上是关于Spring post方法“缺少所需的请求正文”的主要内容,如果未能解决你的问题,请参考以下文章
使用 ContentCachingRequestWrapper 后缺少所需的请求正文
使用 HttpServletRequestWrapper 制作副本后缺少所需的请求正文
缺少所需的请求正文内容:org.springframework.web.method.HandlerMethod$HandlerMethodParameter
缺少所需的请求正文:public org.springframework.http.ResponseEntity<..model.Customer>