java - jackson 无法识别的属性(property)异常

标签 java json spring jackson

我正在尝试将 JsonString 转换为 Java 对象。

Json 对象

{
"action": "added",
"data": {
    "Quote": {
        "TotalDiscountsAmount": 0,
        "Id": "test123"
    },
    "Owner": {
        "Username": "00000000",
        "Id": "00000000"
    },
    "Discount_Amount__c": 0,
    "Base_List_Price__c": 574.88,
    "TotalList": 574.88,
    "Id": "000000",
    "ExtendedTotalList": 574.88,
    "BaseListPrice": 474.88
}
}

我的 POJO:

AddtocartJson.java

package com.product.json;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
  "action",
  "data"
})
public class AddToCartJson {
    @JsonProperty("action")
    private String action;
    @JsonProperty("data")
    private Data data;

    @JsonProperty("action")
    public String getAction() {
        return action;
    }

    @JsonProperty("action")
    public void setAction(String action) {
        this.action = action;
    }

    @JsonProperty("data")
    public Data getData() {
        return data;
    }

    @JsonProperty("data")
    public void setData(Data data) {
        this.data = data;
    }
}

数据.java

package com.product.json;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
  "Quote",
  "Owner",
  "Discount_Amount__c",
  "Base_List_Price__c",
  "TotalList",
  "Id",
  "ExtendedTotalList",
  "BaseListPrice"
})
public class Data {

    @JsonProperty("Quote")
    private com.product.json.Quote Quote;
    @JsonProperty("Owner")
    private com.product.json.Owner Owner;
    @JsonProperty("Discount_Amount__c")
    private Integer DiscountAmountC;
    @JsonProperty("Base_List_Price__c")
    private Double BaseListPriceC;
    @JsonProperty("TotalList")
    private Double TotalList;
    @JsonProperty("Id")
    private String Id;
    @JsonProperty("ExtendedTotalList")
    private Double ExtendedTotalList;
    @JsonProperty("BaseListPrice")
    private Double BaseListPrice;

    @JsonProperty("Quote")
    public com.product.json.Quote getQuote() {
        return Quote;
    }

    @JsonProperty("Quote")
    public void setQuote(com.product.json.Quote Quote) {
        this.Quote = Quote;
    }

    @JsonProperty("Owner")
    public com.product.json.Owner getOwner() {
        return Owner;
    }

    @JsonProperty("Owner")
    public void setOwner(com.product.json.Owner Owner) {
        this.Owner = Owner;
    }

    @JsonProperty("Discount_Amount__c")
    public Integer getDiscountAmountC() {
        return DiscountAmountC;
    }

    @JsonProperty("Discount_Amount__c")
    public void setDiscountAmountC(Integer DiscountAmountC) {
        this.DiscountAmountC = DiscountAmountC;
    }

    @JsonProperty("Base_List_Price__c")
    public Double getBaseListPriceC() {
        return BaseListPriceC;
    }

    @JsonProperty("Base_List_Price__c")
    public void setBaseListPriceC(Double BaseListPriceC) {
        this.BaseListPriceC = BaseListPriceC;
    }

    @JsonProperty("TotalList")
    public Double getTotalList() {
        return TotalList;
    }

    @JsonProperty("TotalList")
    public void setTotalList(Double TotalList) {
        this.TotalList = TotalList;
    }

    @JsonProperty("Id")
    public String getId() {
        return Id;
    }

    @JsonProperty("Id")
    public void setId(String Id) {
        this.Id = Id;
    }

    @JsonProperty("ExtendedTotalList")
    public Double getExtendedTotalList() {
        return ExtendedTotalList;
    }

    @JsonProperty("ExtendedTotalList")
    public void setExtendedTotalList(Double ExtendedTotalList) {
        this.ExtendedTotalList = ExtendedTotalList;
    }

    @JsonProperty("BaseListPrice")
    public Double getBaseListPrice() {
        return BaseListPrice;
    }

    @JsonProperty("BaseListPrice")
    public void setBaseListPrice(Double BaseListPrice) {
        this.BaseListPrice = BaseListPrice;
    }
}

Quote.java

package com.product.json;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
  "TotalDiscountsAmount",
  "Id"
})
public class Quote {
    @JsonProperty("TotalDiscountsAmount")
    private Integer TotalDiscountsAmount;
    @JsonProperty("Id")
    private String Id;

    @JsonProperty("TotalDiscountsAmount")
    public Integer getTotalDiscountsAmount() {
        return TotalDiscountsAmount;
    }

    @JsonProperty("TotalDiscountsAmount")
    public void setTotalDiscountsAmount(Integer TotalDiscountsAmount) {
        this.TotalDiscountsAmount = TotalDiscountsAmount;
    }

    @JsonProperty("Id")
    public String getId() {
        return Id;
    }

    @JsonProperty("Id")
    public void setId(String Id) {
        this.Id = Id;
    }
}

当我尝试使用映射器将 JSON 转换为 Java 类时,它抛出一个 UnrecognizedPropertyException。看起来很喜欢,即使我有一个 Quote 对象,但映射器无法识别该对象。

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "Quote" (Class com.product.json.Data), not marked as ignorable at [Source: java.io.StringReader@11547748; line: 1, column: 36] (through reference chain: com.product.json.AddToCartJson["data"]-> com.product.json.Data["Quote"]) at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53) at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267) at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)

我该如何解决这个问题?

最佳答案

这里的问题是 OP 混合了两个不同的 Jackson 版本:

  • 1.9 来自 org.codehaus(org.codehaus.jackson.map.exc.UnrecognizedPropertyException 显示)
  • 来自 com.fasterxml 的 2.x(在导入 import com.fasterxml.jackson.annotation. 中可见)

正如 sam 指出的那样在评论中,OP 应该只使用一个版本。要么使用 2.x 进行反序列化,要么使用旧 1.9 版本的注释。 但建议使用 com.fasterxml 中的最新版本,而不是旧版本。

关于java - jackson 无法识别的属性(property)异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33103072/

相关文章:

java - Spring中的@Valid注解表示什么?

java - 如何让maven项目从自己的目录而不是工作目录中识别文件?

Java 命名查询

c++ - 访问和存储/解析 std::chrono::duration::milliseconds (cpprest) 时使用什么类型

带有 Spring 的 Android REST 处理太长的请求

java - 使用支持灵活方法签名的 Spring 创建自定义注释

java - 暂时暂停方法直到下次调用

java - 分配速度是否取决于所使用的垃圾收集器?

java - CXF 使用 JSON 调用 REST 服务

java - 如何在Java中解析JSON