Java 使用@JsonFormat时,json中带有继承和对象列表的对象序列化无效

Java 使用@JsonFormat时,json中带有继承和对象列表的对象序列化无效,java,json,jackson,jackson-databind,Java,Json,Jackson,Jackson Databind,我有以下课程: 形状: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) @JsonSubTypes({ @JsonSubTypes.Type(value = Rectangle.class), @JsonSubTypes.Type(value = Circle.class)}) public abstract class Shape { } 圆

我有以下课程:

形状:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
        @JsonSubTypes.Type(value = Rectangle.class),
        @JsonSubTypes.Type(value = Circle.class)})
public abstract class Shape {
}
圆圈:

@JsonTypeName("circle")
public class Circle extends Shape {
    int radius;
    //getters,setters
}
矩形:

@JsonTypeName("rectangle")
public class Rectangle extends Shape {
    private int w;
    private int h;
    //getters,setters
}
视图:

序列化后,我得到以下json字符串:

[[{"circle":{"radius":2}},{"rectangle":{"w":5,"h":4}}]]
我得到数组中的数组。我可以使用以下行,使用相同的结构:

[{"circle":{"radius":2}},{"rectangle":{"w":5,"h":4}}]

我不想将列表包装成数组,列表对我来说已经是数组。

您的
视图
类将
形状
定义为列表。您需要将其更改为
private Shape但是,它不正确。我会有一个形状列表。通过这种方法,我会有一个。哦,我现在明白你的意思了,我错了。您是否尝试从
视图
类中删除jsonformat注释?是的,我尝试过。在这种情况下,我得到它:
{“shapes”:[{“circle”:{“radius”:2}},{“rectangle”:{“w”:5,“h”:4}}]}
我得到了
shapes
键,但它是多余的。你有什么想法吗?
[[{"circle":{"radius":2}},{"rectangle":{"w":5,"h":4}}]]
[{"circle":{"radius":2}},{"rectangle":{"w":5,"h":4}}]