I thought that @RequestBody tries to map request params to the object after the annotation by the property names.
But if I got:
@RequestMapping(value = "/form", method = RequestMethod.GET)
public @ResponseBody Person formGet(@RequestBody Person p,ModelMap model) {
return p;
}
The request:
http://localhost:8080/proj/home/form?id=2&name=asd
Return 415
When I change @RequestBody Person p with @RequestParam Map<String, String> params it's OK:
@RequestMapping(value = "/form", method = RequestMethod.GET)
public @ResponseBody Person formGet(@RequestParam Map<String, String> params) {
return new Person();
}
Person class:
public class Person{
private long id;
private String name;
public Person() {
}
public Person(long id, String name) {
super();
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Spring vresion 3.2.3.RELEASE
Where did I go wrong?
No, it's a job for @ModelAttribute, not @RequestBody.
@ModelAttribute populates fields of the target object with values of the corresponding request parameters, performing conversions if necessary. It can be used for requests generated by HTML forms, links with parameters, etc.
@RequestBody converts requests to object using one of preconfigured HttpMessageConverters. It can be used for requests containing JSON, XML, etc. However, there is no HttpMessageConverter that replicates behavior of @ModelAttribute.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With