使用杰克逊

时间:2019-12-03 12:00:22

标签: java kotlin jackson

问题

例如,我在购物车中列出了一些产品清单,例如电影票,汽车共享和新书。

[
  {
    "name": "Cinema Ticket"
  }, 
  {
    "name": "Car Sharing",
    "properties": { ... }
  },
  {
    "name": "New Book",
  }
]

如您所见,并非所有产品都具有properties注意:该字段是多态的。

问题

我可以使用杰克逊将“不存在的”字段properties转换为null还是最好更改api? 如果可以的话,该怎么做?

杰克逊版本:2.10.1

感谢答案!

1 个答案:

答案 0 :(得分:0)

我想你有类似的东西:

public class BaseProduct {
   public String name;
}

public class CarSharing extends BaseProduct {
    public String properties;
}

public class Book extends BaseProduct {
}

除了将 properties 字段设置为null之外,您还可以使用Jackson多态功能不显示该字段。像这样:

@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTypeInfo.As.PROPERTY, property = "type")
public class BaseProduct {
     public String name;
}

输出为:

[
  {
    "type": ".Book",
    "name": "Book name"
  },
  {
    "type": ".CarSharing",
    "name": "Car share name",
    "properties": "a property field"
  }
]