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' の場合は動物を Cat タイプにマップし、type=='Dog' の場合は Dog クラスにマップするように Spring MVC に指示するにはどうすればよいですか?

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 {...}

注釈への参照は、fasterxml.githubにあります。

于 2014-09-22T19:07:13.637 に答える