【问题标题】:Jackson UnrecognizedPropertyExceptionJackson UnrecognizedPropertyException
【发布时间】:2015-10-13 12:45:11
【问题描述】:

我正在尝试将 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;
    }
}

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:无法识别的字段“报价”(com.product.json.Data 类),未标记为可忽略 在 [来源:java.io.StringReader@11547748;行:1,列:36](通过引用链:com.product.json.AddToCartJson["data"]-> com.product.json.Data["Quote"]) 在 org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53) 在 org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267) 在 org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)

我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试将导入更改为 org.codehaus.jackson.annotate.* 以获取注释?
  • 也使用最新版的jackson
  • @Sam,谢谢,您能否将您的评论添加为答案。以便我接受答案
  • 这里的这个问题和本题的问题类似:stackoverflow.com/questions/31560530/…

标签: java json spring jackson


【解决方案1】:

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

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

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

【讨论】:

  • 我遇到了同样的问题,感谢 IJs 糟糕的自动导入谢谢!
  • @Jackie 好吧,IDE 只能导入已经在类路径中的东西,所以问题是:为什么类路径中有两个不同的版本? :)
  • 很公平,但由于某些过时依赖项的依赖项并不是最容易缓解的,因此被埋藏在某处。
【解决方案2】:

您可能希望通过使用 Jackson 的类级别注释来忽略未定义的属性:

@JsonIgnoreProperties

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2022-06-12
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多