I have a Spring rest endpoint doing a simple hello app. It should accept a {"name":"something"} and return "Hello, something".
My controller is:
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
@RequestMapping(value="/greeting", method=RequestMethod.POST)
public String greeting(Person person) {
return String.format(template, person.getName());
}
}
Person:
public class Person {
private String name;
public Person() {
this.name = "World";
}
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
When I make a request to the service like
curl -X POST -d '{"name": "something"}' http://localhost:8081/testapp/greeting
I get
Hello, World!
Looks like it isn't deserializing the json into the Person object properly. It's using the default constructor and then not setting the name. I found this: How to create a POST request in REST to accept a JSON input? so I tried adding an @RequestBody on the controller but that causes some error about "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported". I see that is covered here: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported for @RequestBody MultiValueMap which suggests removing the @RequestBody
I have tried removing the default constructor which it doesn't like either.
This question covers null values REST webservice using Spring MVC returning null while posting JSON but it suggests adding @RequestBody but that conflicts with above...
You must set 'produces' with @RequestMapping(value="/greeting", method=RequestMethod.POST)
use below code
You must set the
@RequestBody
to tell to Spring what should be use to set yourperson
param.