Spring 3 MVC - using domain objects as @RequestBody
I am thinking of using domain object as @RequestBody. My domain objects are immutable objects and so they do not have any setter methods. Its a application/json request and I am using Jackson message converter.
@RequestMapping(value="/user", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.NO_CONTENT)
public @ResponseBody void createUser(@RequestBody User user) {
..........
}
Since I do not have setter methods inside my user object, when I do a POST request to "/user", I get UnrecognizedPropertyException from MappingJacksonHttpMessageConverter. Is there a way in spring in which I would be able to assign data using a static fa开发者_如何学编程ctory method(or constructor) of user object instead of setters.
I found the answer myself. Use @JsonCreator. Here is an example. You can use it on static factory methods as well.
@JsonCreator
public NonDefaultBean(@JsonProperty("name") String name, @JsonProperty("age") int age)
{
this.name = name;
this.age = age;
}
I think this is up to your JSON parser. I know that GSON[1] works on fields (as opposed to getters/setters), so you may have better luck using that. You'll have to writer your own message converter, I believe.
[1] http://code.google.com/p/google-gson/
精彩评论