尽管有 @SerializedName 注释,反序列化期间无法识别的字段

Unrecognized field during deserialization despite @SerializedName annotation

我正在通过 REST 服务获取一些数据,但在反序列化响应时出现此错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ResultSet Output" (class com.HolderCollectionWrapper), not marked as ignorable (one known property: "holders"]) at [Source: java.io.ByteArrayInputStream@74efa7bd; line: 1, column: 22] (through reference chain: com.HolderCollectionWrapper["ResultSet Output"])

这是我的代码:

response = restTemplate.exchange(requestUrl, HttpMethod.GET, request, HolderCollectionWrapper.class);


public class HolderCollectionWrapper {

    @SerializedName("ResultSet Output")
    private List<Holder> holders;

    public List<Holder> getHolders() {
        return holders;
    }

    public void setHolders(List<Holder> holders) {
        this.holders = holders;
    }
}

这是我得到的 JSON :

{
    "ResultSet Output": [
        {...}, {...}, {...}
    ]
}

尽管 @SerializedName("ResultSet Output"),但它不起作用,为什么?

@SerializedName 是一个 gson 注释,您正在使用 jackson 库进行序列化。

字段名称的 jackson 注释是 @JsonProperty

尝试:

@JsonProperty("ResultSet Output")
private List<Holder> holders;

发生这种情况是因为 SerializedName("ResultSet Output") gson 注释指示 holders 将使用 ResultSet Output 名称进行序列化,如 json 示例你 post;要使用 jackson 反序列化它,您必须使用 JsonProperty 注释,指定 ResultSet Output 名称应用于 setter 以避免与用于的 gson 库可能发生冲突序列化:

public class HolderCollectionWrapper {

    @SerializedName("ResultSet Output")
    private List<Holder> holders;

    public List<Holder> getHolders() {
        return holders;
    }

    @JsonProperty("ResultSet Output")
    public void setHolders(List<Holder> holders) {
        this.holders = holders;
    }
}