java - Jackson 通过特定键将 json 反序列化为不同的子类

标签 java json jackson

来自服务器的 json 字符串如下所示(简化)

{
   "p1":"v1",
   "c1":{
        "a1":"string1",
        "a2":"string2"
        }
}

{
   "p1":"v2",
   "c2":{
        "b1":"string3",
        "b2":"string4"
        }
}

是否有一种使用 jackson 来反序列化 json 字符串的方法:

P类包含常见的响应信息(标志,状态代码,状态消息......) C1类和C2类有自己具体的业务数据

class P{
    String p1;
}
class C1 extend P{
    String a1;
    String a2;
}
class C2 extend P{
    String b1;
    String b2;
}

问题(简​​化):

{"p1":"v1","c1":{"a1":"string1","a2":"string2"}}C1 类

{"p1":"v2","c2":{"b1":"string3","b2":"string4"}}C2 类

最佳答案

是的,您可以使用字段将每个对象转换为特定的类,该字段将指示所提供的基类中的类类型,如下所示

@JsonTypeInfo(
  use = JsonTypeInfo.Id.NAME, 
  include = JsonTypeInfo.As.PROPERTY, 
  property = "type")
@JsonSubTypes({ 
  @Type(value = Car.class, name = "car"), 
  @Type(value = Truck.class, name = "truck") 
})
public class Vehicle {
       private String type; //where type car for Car.class and truck for Truck.class
    // fields, constructors, getters and setters
}

关于java - Jackson 通过特定键将 json 反序列化为不同的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45561382/

相关文章:

java - @DateTimeFormat(pattern ="yyyy-MM-dd") 使用 Spring Mvc Rest Service 给出 "error 400 request syntactically incorrect"

javascript - Chrome 中启用的硬件加速可防止 Canvas 使用 Fabricjs 显示矢量图像

json - 在 Ruby 中通过路径替换和访问嵌套 hash/json 中的值

scala - 有没有办法阻止 Scala 2.12 破坏 Jackson 对象映射器?

java - 如何使用 jackson 库从 JSON 字符串中获取值?

java - Android 混淆 Proguard 问题

java - 从 Java 应用程序打开 WMV 文件时访问被拒绝

java - 如何删除过时的 java 类文件?

java - SONAR Violation IllegalType,为什么修复它很重要?

java - 从用户那里收到值(value)时,正确的评论方式是什么?