使用杰克逊

时间:2019-06-24 15:46:48

标签: java json jackson

我正在接收JSON和字符串包装的JSON的混合体。 例如:

{
  "shapes": [
    {
      "type": "1",
      "shape": "{\"w\":3,\"h\":6}"
    },
    {
      "type": "2",
      "shape": "{\"radius\":5}"
    }
  ]
}

我想用不同的对象类型反序列化它。

abstract class Shape {
}

@Data
class Rectangle extends Shape {
    private int w;
    private int h;
}

@Data
class Circle extends Shape {
    private int radius;
}

@Data
class NodeParent {

    private Integer type;

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
    @JsonSubTypes({
            @JsonSubTypes.Type(value = Rectangle.class, name = "1"),
            @JsonSubTypes.Type(value = Circle.class, name = "2")
    })
    private Shape shape;
}

@Data
class Root {

    private List<NodeParent> shapes;

}

这种方法适用于普通的JSON(无需字符串包装)

但是对于我的有效负载而言,它失败了,因为它在“ shape”中看到了一个字符串。我可以为此使用自定义反序列化器。但是然后我将不得不在那里映射所有类型。我宁愿使用注释。

可以做到吗?

0 个答案:

没有答案
相关问题