【问题标题】:Spring post method "Required request body is missing"Spring post方法“缺少所需的请求正文”
【发布时间】: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

标签: spring rest spring-boot post


【解决方案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 可以参考这个问题:stackoverflow.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" 标头,因此服务没有考虑请求正文。

【讨论】:

  • 你拯救了我的一天
猜你喜欢
  • 2018-07-18
  • 2021-09-24
  • 2022-11-11
  • 1970-01-01
  • 2020-04-01
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
相关资源
最近更新 更多