Jackson UnrecognizedPropertyException
Ich versuche zu konvertieren JsonString Java-Objekt.
Json-Objekt
{
"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
}
}
Meine POJOs:
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;
}
}
Wenn ich versuchen, zu konvertieren von JSON zu Java-Klasse mit dem mapper, es wirft ein UnrecognizedPropertyException
. Scheint gerne, obwohl ich einen Quote
Objekt irgendwie mapper ist nicht in der Lage zu erkennen das Objekt.
org.codehaus.jackson.Karte.exc.UnrecognizedPropertyException: Unbekanntes Feld "Quote" (Klasse com.Produkt.json.Daten), nicht gekennzeichnet als vernachlässigbar
an [Quelle: java.io.StringReader@11547748; Zeile: 1, Spalte: 36] (durch Verweis Kette: com.Produkt.json.AddToCartJson["Daten"]-> com.Produkt.json.Daten["Quote"])
bei org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
bei org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
bei org.codehaus.jackson.Karte.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
Wie kann ich dieses Problem beheben?
- haben Sie versucht, ändern Ihre import org.codehaus.jackson.mit Anmerkungen versehen.* für Anmerkungen?
- und auch die neueste version von jackson
- Dank und können Sie fügen Sie Ihren Kommentar als eine Antwort.So kann ich die Antwort akzeptieren
- Das problem hier ist ähnlich wie das problem bei dieser Frage: stackoverflow.com/questions/31560530/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem hier ist, dass OP mischt zwei verschiedene Jackson-Versionen:
org.codehaus
(org.codehaus.jackson.map.exc.UnrecognizedPropertyException
zeigt, dass)com.fasterxml
(sichtbar in der Einfuhrimport com.fasterxml.jackson.annotation.
)Wie bereits von sam in den Kommentaren, OP sollte nur eine version. Entweder 2.x für die Deserialisierung oder mit Anmerkungen aus den alten 1.9 version.
Aber es wird empfohlen, die Verwendung der neuesten version von
com.fasterxml
, anstelle der alten.möchten Sie vielleicht zu ignorieren, nicht definierte Eigenschaften durch die Verwendung von Jackson ' s class-level annotation:
@JsonIgnoreProperties