Подтвердить что ты не робот

Полиморфизм в JSON, Джерси и Джексоне

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

Скажем, например, что у меня есть класс родителя и дочерний класс, который наследует его. И, допустим, я хочу использовать JSON для отправки и получения родительского и дочернего по 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.

4b9b3361

Ответ 1

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

В вашем дочернем классе аннотируется имя:

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