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

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

我正在通过REST服务获取一些数据,但在反序列化响应时出现以下错误:
@SerializedName("ResultSet Output")
这是我的代码:

  1. response = restTemplate.exchange(requestUrl, HttpMethod.GET, request, HolderCollectionWrapper.class);
  2. public class HolderCollectionWrapper {
  3. @SerializedName("ResultSet Output")
  4. private List<Holder> holders;
  5. public List<Holder> getHolders() {
  6. return holders;
  7. }
  8. public void setHolders(List<Holder> holders) {
  9. this.holders = holders;
  10. }
  11. }

这是我得到的JSON:

  1. {
  2. "ResultSet Output": [
  3. {...}, {...}, {...}
  4. ]
  5. }

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

qvk1mo1f

qvk1mo1f1#

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

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

fruv7luv2#

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

  1. public class HolderCollectionWrapper {
  2. @SerializedName("ResultSet Output")
  3. private List<Holder> holders;
  4. public List<Holder> getHolders() {
  5. return holders;
  6. }
  7. @JsonProperty("ResultSet Output")
  8. public void setHolders(List<Holder> holders) {
  9. this.holders = holders;
  10. }
  11. }

相关问题