2015-10-13 194 views
-1

我想將JsonString轉換爲Java對象。傑克遜UnrecognizedPropertyException

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:[email protected]:無法識別的字段 「報價」(類com.product.json.Data),而不是在[來源標記爲可忽略 ; line:1,column:36](通過引用鏈: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)

我該如何解決這個問題?

+0

您是否嘗試將您的導入更改爲_org.codehaus.jackson.annotate。* _註解? – Sam

+0

並且還使用最新版本的jackson –

+0

@Sam,謝謝,並且可以將您的評論添加爲答案。因此,我可以接受答案 – sree

回答

1

這裏的問題是,OP把兩種不同傑克遜版本:

  • 1.9從org.codehausorg.codehaus.jackson.map.exc.UnrecognizedPropertyException顯示)
  • 2.x從com.fasterxml(可見於進口import com.fasterxml.jackson.annotation.

正如在評論中指出sam,OP應該只使用一個版本。要麼使用2.x進行反序列化,要麼使用舊版本的1.9註釋。 但建議使用com.fasterxml的最新版本,而不是舊版本。

+0

感謝IJs蹩腳的自動導入感謝,我有同樣的問題! – Jackie

+0

@Jackie那麼,IDE只能導入東西,這已經在類路徑,所以問題是:爲什麼你在classpath中引入兩個不同的版本? :) – Tom

+0

夠公平的,但埋在某個地方作爲一些過時依賴的依賴不是最容易緩解。 – Jackie

0

你可能想通過使用傑克遜的類級註解忽略未定義的屬性:

@JsonIgnoreProperties