尽管有 @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;
}
}
我正在通过 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;
}
}