Spring 3 MVC - 使用域对象作为@RequestBody

时间:2011-10-11 20:36:42

标签: spring model-view-controller controller

我正在考虑将域对象用作@RequestBody。我的域对象是不可变对象,因此它们没有任何setter方法。它是一个application / json请求,我正在使用Jackson消息转换器。

@RequestMapping(value="/user", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.NO_CONTENT)
public @ResponseBody void createUser(@RequestBody User user) {
    .......... 
}

由于我的用户对象中没有setter方法,当我向“/ user”发出POST请求时,我从MappingJacksonHttpMessageConverter获取UnrecognizedPropertyException。有没有一种方法在春天我可以使用用户对象的静态工厂方法(或构造函数)而不是setter来分配数据。

2 个答案:

答案 0 :(得分:2)

我自己找到了答案。使用@JsonCreator。这是一个例子。您也可以在静态工厂方法上使用它。

@JsonCreator
public NonDefaultBean(@JsonProperty("name") String name, @JsonProperty("age") int age)
{
  this.name = name;
  this.age = age;
}

答案 1 :(得分:0)

我认为这取决于您的JSON解析器。我知道GSON [1]适用于字段(而不是getter / setter),因此使用它可能会有更好的运气。我相信你必须编写自己的消息转换器。

[1] http://code.google.com/p/google-gson/