Spring post方法“缺少必需的请求正文”

eoigrqb6  于 2023-02-16  发布在  Spring
关注(0)|答案(7)|浏览(271)
@PostMapping(path="/login")
public ResponseEntity<User> loginUser(@RequestBody Map<String, String> userData) throws Exception {
    return ResponseEntity.ok(userService.login(userData));
}

我在UserController中有这个登录方法。问题是当我尝试为登录发出post请求时,我得到这个错误:

{
"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"
}

t98cgbkg

t98cgbkg1#

如果是POST请求,则必须在正文中将其作为JSON传递。

yfwxisqw

yfwxisqw2#

我也遇到过类似的问题,在我的Sping Boot 服务中出现此错误
HttpMessage不可读异常:缺少必需的请求正文:...
我的问题是,当我从Postman发出请求时,**“Content-Length”**标头未被选中,因此服务不会考虑请求正文。

gr8qqesn

gr8qqesn3#

发生这种情况是因为你没有传递一个身体到你的服务器。我可以看到在你的截图你是通过电子邮件和密码作为一个请求参数。
要处理这些值,可以执行以下操作:

@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中传递电子邮件和密码。

mbzjlibv

mbzjlibv4#

您需要将Body中的数据作为JSON发送

{ "email":"email@email.com", "password":"tuffCookie"}
vs3odd8k

vs3odd8k5#

如果它仍然不起作用,请尝试在标题中添加附加信息UTF-8
密钥:Content-Type值:application/json; charset=utf-8
对于我的情况,我必须在标题中添加UTF-8

hof1towb

hof1towb6#

在我的例子中,我发送给REST服务的是定义不好的JSON。
属性应该是一个对象,在我的例子中只是字符串:
变更自:

"client" = "",

致:

"client" = { ... },

在我的例子中,String没有添加关于不同格式的值的附加信息。

qacovj5a

qacovj5a7#

在我的例子中,标题“Content-Length”没有被选中。

相关问题