我正在接收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”中看到了一个字符串。我可以为此使用自定义反序列化器。但是然后我将不得不在那里映射所有类型。我宁愿使用注释。
可以做到吗?