Spring post method "Required request body is missing"

May 2024 ยท 3 minute read
@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

3

10 Answers

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

enter image description here

2

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.

1

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.

3

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.

1

You need to send data in Body as JSON

 { "email":"[email protected]", "password":"tuffCookie"} 
2

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.

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

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

in my case i was using @RequestBody in a @GetMapping api and for that reason happened to face the issue "Required request body is missing", hope nobody do this crazy thing because doesn't make sense at all but if someone like will do, here is a quick solution to fix it :D

I was encountering the same issue, turns out that my JSON body was not valid. I mindlessly added some Java style comments which made it invalid.

1

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJobGtxZ2mAdHyOrKeroZ6cerG70q1kpp2knbyledGeqK6hopqxbr7Eqqyeq6Rir7Cw2GagrGWdnsC0tc2g