I've just started using Spring, and I'm trying to receive a form-urlencoded POST body in a rest controller, but I can't for the life of me get it to work. Here's my "Hello World"-esque controller:
@RestController
public class MyController {
@ResponseBody
@RequestMapping(
value = "/",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = MediaType.TEXT_PLAIN_VALUE
)
public String index(@RequestBody String text) {
return "Text: " + text;
}
}
I've tried many different variations, all with differing errors. The particular configuration above produces the following error when receiving a POST request with a "text" parameter from Postman.
Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.mywebsite.controllers.MyController.index(java.lang.String)
I've looked at many other stackoverflow posts about this topic and tried to implement their various solutions to no avail. Here's a list of the most promising ones:
- Spring JSON request body not mapped to Java POJO
- This is the ideal outcome for me, a POJO with all the parameters. However, when I tried this, all POJO fields were null no matter what I passed in.
- How to get Form data as a Map in Spring MVC controller?
- Following the first solution on that post, using a MultiValueMap produces the same error as above.
- In the second, the parameter map is empty every time.
- How to retrieve FORM/POST Parameters in Spring Controller?
- Produces an empty map, similar to the one above.
There were a couple more that I can no longer find, and for most of these posts I've tried tweaking the annotations each time. I had great success when I tried GET and JSON POST requests, but for some reason these urlencoded requests refuse to work.