26

假设我有一个域类:

    public class Zoo{
        private List<Animal> animals;
        ....

其中 Animal 是具有不同实现(Cat,Dog)的接口。假设我希望能够保存 Zoo 对象:

    @RequestMapping(value = "/zoo", method = RequestMethod.POST)
    public @ResponseBody void save(@RequestBody Zoo zoo) {
    ....

我想发送一个 json - 比如:

    {
        animals:[
            {type:'Cat', whiskers-length:'3'},
            {type:'Dog', name:'Fancy'}
        ]
    }

当 type=='Cat' 时如何告诉 spring MVC 将动物映射到 Cat 类型,并在 type=='Dog' 时将其映射到 Dog 类?

4

2 回答 2

29

您应该使用 Jackson 注释@JsonTypeInfo@JsonSubTypes实现多态 json。注释在Animal基类上。

@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Dog.class, name = "Dog"),
        @JsonSubTypes.Type(value = Cat.class, name = "Cat")})
public abstract class Animal {

}
于 2013-06-22T04:45:17.900 回答
6

现在有一个更简单的注释:

@JsonRootName("dog")
public class Dog extends Animal {...}

注释的引用可以在fastxml.github上找到

于 2014-09-22T19:07:13.637 回答