Полиморфизм в JSON, Джерси и Джексон - PullRequest
14 голосов
/ 19 декабря 2011

Поддерживает ли Джексон с Джерси полиморфные классы поверх JSON?

Допустим, например, что у меня есть класс Parent и класс Child, который наследуется от него.И, скажем, я хочу использовать JSON для отправки и получения Parent и Child по HTTP.

public class Parent {
...
}

public class Child extends Parent {
...
}

Я думал о такой реализации:

@Consumes({ "application/json" }) // This method supposed to get a parent, enhance it and return it back
    public @ResponseBody 
    Parent enhance(@RequestBody Parent parent) {
    ...
    }

Вопрос:Если я дам эту функцию (через JSON, конечно) объект Child, будет ли он работать?Будут ли сериализированы дополнительные поля-члены ребенка?По сути, я хочу знать, поддерживают ли эти платформы полиморфное потребление и ответ.

Кстати, я работаю с Spring MVC.

1 Ответ

13 голосов
/ 21 февраля 2012

Джексон поддерживает полиморфизм,

В классе вашего ребенка аннотируйте имя:

 @JsonTypeName("Child_Class")
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "objectType")
 public class Child extends Parent{
 ....
 }

В родительском указываются подтипы:

@JsonSubTypes({ @JsonSubTypes.Type(value = Child.class), @JsonSubTypes.Type(value = SomeOther.class)}) 
public class Parent {
    ....
}
...