java - JSON、Jersey 和 Jackson 中的多态性

标签 java json spring-mvc jersey jackson

Jackson with Jersey 是否支持基于 JSON 的多态类?

例如,假设我有一个父类和一个继承自它的子类。而且,假设我想使用 JSON 通过 HTTP 发送和接收 Parent 和 Child。

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 对象,它会工作吗? Child 的额外成员字段也会被序列化吗? 基本上,我想知道这些框架是否支持多态消费和响应。

顺便说一句,我正在使用 Spring MVC。

最佳答案

Jackson确实支持多态,

在您的子类中用名称注释:

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

关于java - JSON、Jersey 和 Jackson 中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565299/

相关文章:

java - Java中将不恒定字段的Json反序列化为POJO

java - 如何区分实现和规范

jQuery 插件问题 - 使用 JSON 数据填充选择选项

php - 无法使用 Jquery 获取 JSON 值

spring-mvc - Spring MVC 资源映射标记在服务器主机上不起作用

java - 为什么ArrayList返回错误: ArrayIndexOutOfBoundsException

java - 如何使用 ExpressionBuilder 将 "myfields >= TRUNC(sysdate)"子句添加到 ReportQuery (Toplink)

java - 如何使用 Jackson Mixin 将 Json 映射到 Proto?

java - 当其中一个字段不是 String 而是另一个对象时,如何使用 Spring MVC 提交表单?

java - org.hibernate.LazyInitializationException : even with @Transactional