杰克逊无法序列化多态对象列表

jackson not able to serialize a list of polymorphic objects

我有一个摘要 class,我需要将其序列化为项目列表并以 json 格式通过网络发送。

@JsonTypeInfo(
    use=JsonTypeInfo.Id.NAME,
    include= As.PROPERTY,
    property="searchMatchType",
    defaultImpl = NoClass.class,
    visible = true)
@JsonSubTypes({
    @Type(value = Match.class, name = "MATCH"),
    @Type(value = SynonymMatchA.class, name = "SYNONYM_MATCH_A"),
    @Type(value = SynonymMatchB.class, name = "SYNONYM_MATCH_B")
})
public abstract class SearchResult {

    private TypeA typeA;

    private SearchMatchType searchMatchType;

    @JsonCreator
    public SearchResult(
           @JsonProperty("searchMatchType") SearchMatchType searchMatchType,
           @JsonProperty("typeA") TypeA typeA) {
        this.searchMatchType = searchMatchType;
        this.typeA = typeA;
    }  
}

我知道我们不能序列化 java 中的对象列表,因为 java 编译器在编译时应用类型擦除。所以我创建了一个包装器 class 如下所示,并从主控制器而不是列表返回它。

public class SearchResultList {

    private final List<SearchResult> searchResults;

    @JsonCreator
    public SearchResultList(
          @JsonProperty("searchResults") List<SearchResult> searchResults) {
        this.searchResults = searchResults;
    }
}

我正在用类型为 MATCH、SYNONYM_MATCH_A 和 SYNONYM_MATCH_B 的对象填充列表,它们是 SearchResult class 的子类型。 现在在 json 中,我可以看到基础 class 字段,但看不到来自 classes MATCH、SYNONYM_MATCH_A 和 [=19 的派生 class 字段=].当我检查服务器上的列表而不是从列表序列化的 json 中时,我能够看到这些完整的对象。

我没有对派生的 class 中的字段使用 getter,因此 jackson 在从对象序列化为 json 格式时无法获取字段的值。一旦我放置了吸气剂,它就能够正确序列化。