【问题标题】:Spring 3 MVC - using domain objects as @RequestBodySpring 3 MVC - 使用域对象作为@RequestBody
【发布时间】:2011-12-05 15:20:49
【问题描述】:

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

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

由于我的用户对象中没有设置方法,所以当我向“/user”发出 POST 请求时,我从 MappingJacksonHttpMessageConverter 收到 UnrecognizedPropertyException。春天有没有办法让我能够使用用户对象的静态工厂方法(或构造函数)而不是 setter 来分配数据。

【问题讨论】:

    标签: spring model-view-controller controller


    【解决方案1】:

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

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

    【讨论】:

    • 不错的答案,正是我想要的。
    【解决方案2】:

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

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

    【讨论】:

    • 另外:从 1.2 版开始,Jackson 允许使用“Creator”方法(构造函数和静态工厂方法),这意味着如果要通过构造函数( wiki.fasterxml.com/JacksonFAQ#Data_Binding.2C_general)。我想知道 MappingJacksonHttpMessageConverter 是如何实现的。
    猜你喜欢
    • 2011-10-25
    • 2015-03-08
    • 2015-06-21
    • 1970-01-01
    • 2017-09-15
    • 2015-09-08
    • 2014-08-05
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多