2015-10-13 142 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