22
@PostMapping(path="/login")
public ResponseEntity<User> loginUser(@RequestBody Map<String, String> userData) throws Exception {
    return ResponseEntity.ok(userService.login(userData));
}

I have this method for the login in the UserController. The problem is when i try to make the post request for the login i get this error:

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

enter image description here

cosmos
  • 2,143
  • 2
  • 17
  • 27
Ionut
  • 231
  • 1
  • 2
  • 8

8 Answers8

34

You have to pass that as JSON in your body, if it's a POST request.

enter image description here

cosmos
  • 2,143
  • 2
  • 17
  • 27
13

I had a similar issue, was getting this error in my Spring Boot service

HttpMessageNotReadableException: Required request body is missing:...

My issue was that, when I was making requests from Postman, the "Content-Length" header was unchecked, so service was not considering the request body.

Florin D
  • 1,610
  • 18
  • 17
9

This is happening because you are not passing a body to you server. As can I see in your screenshot you are passing email and password as a ResquestParam.

To handle this values, you can do the following:

@PostMapping(path="/login")
public ResponseEntity<User> loginUser(@RequestParam("email") String email, @RequestParam("password") String password) {
     //your imp
}

In order to accept an empty body you can use the required param in the RequestBody annotation:

@RequestBody(required = false)

But this will not solve your problem. Receiving as RequestParam will.

If you want to use RequestBody you should pass the email and password in the body.

L. Figueredo
  • 278
  • 2
  • 11
  • To receive RequestParam in POST you can refer to this question: https://stackoverflow.com/questions/17964841/how-to-get-param-in-method-post-spring-mvc You can also pass the data through the body, which makes sense too, since it is a post request. – L. Figueredo Oct 24 '18 at 17:07
  • The **@RequestBody** for the Type doesn't work, but actual Type parameters work? Wonder why? – Jose Mhlanga Jan 12 '20 at 23:49
  • this solution works for me, make sure on postman you're sending the post with the parameters as well – Shender Ramos Oct 31 '21 at 11:11
3

You need to send data in Body as JSON

 { "email":"email@email.com", "password":"tuffCookie"}
Ori Marko
  • 56,308
  • 23
  • 131
  • 233
1

If it's still not working, try adding additional information UTF-8 in Headers.

key : Content-Type value : application/json; charset=utf-8

For my case, I must adding UTF-8 in Headers.

Johan
  • 207
  • 4
  • 14
0

In my case it was poorly defined JSON that I sent to my REST service.

Attribute that was suppose to be an object, was in my case just string:

Changed from:

"client" = "",

to:

"client" = { ... },

In my case String did not add additional information about value in different format.

Viktor Reinok
  • 113
  • 13
0

In my case, adding such header 'Content-Type: application/x-www-form-urlencoded' solves the issue. The servlet do have the @RequestBody part. I assume Spring will need such header to form the post body

rosa
  • 87
  • 1
  • 3
0

If it is XML Request Try importing jackson-dataformat-xml.jar to your project it worked for me.