gson 尽管有@SerializedName注解,反序列化期间仍无法识别字段

pw9qyyiw  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(604)

我正在通过REST服务获取一些数据,但在反序列化响应时出现以下错误:
@SerializedName("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"),它还是不起作用,为什么?

qvk1mo1f

qvk1mo1f1#

@SerializedName是一个gson注解,而您正在使用Jackson库进行序列化。
字段名的Jackson注解为@JsonProperty
请尝试:

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

fruv7luv2#

发生这种情况是因为SerializedName("ResultSet Output") gson注解指示holders将使用 ResultSet Output 名称进行序列化,就像您发布的json示例一样;要用Jackson反序列化它,必须使用JsonProperty注解,指定应用于setter的 ResultSet Output 名称,以避免与用于序列化的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;
    }
}

相关问题