Deserialisieren von JSON in Objekt mit überladenen Methoden mit Jackson
Ich bin versucht zu Deserialisieren ein JSON-Objekt gespeichert CouchDb mit Jackson. Dieses Objekt Deserialisieren in eine pojo, enthält überladenen Methoden. Wenn ich Versuch zum abrufen des Objekts von der couch und tun die Deserialisierung bekomme ich die folgende exception:
org.ektorp.DbAccessException:
org.codehaus.jackson.Karte.JsonMappingException:
Widersprüchliche Definitionen für setter
Eigenschaft "Multiplikator":
com.db.waren.Rahmen.sdos.Modell.Sicherheit.EqOpt#setMultiplier(1
params) vs
com.db.waren.Rahmen.sdos.Modell.Sicherheit.EqOpt#setMultiplier(1
params)
Habe ich versucht zu kommentieren setter möchte ich Jackson zu benutzen, aber das scheint nicht geklappt haben.
@JsonProperty("multiplier")
public void setMultiplier(SDOSAttribute multiplier) {
this.multiplier = multiplier;
}
public void setMultiplier(double multiplier) {
this.multiplier.setValue(String.valueOf(multiplier));
}
Wie Konfiguriere ich Jackson richtig zu Deserialisieren mit einer bestimmten Methode? Oder bin ich an dieses problem der falsche Weg ist?
EDIT:
Habe ich folgende änderungen vorgenommen. Dies scheint zu funktionieren, aber ist ein wenig hässlicher. Wenn jemand eine bessere Möglichkeit, dies zu tun, fühlen Sie sich bitte frei, zu teilen, und ich werde gerne annehmen.
@JsonProperty("multiplier")
protected void setMultiplierAttribute(SDOSAttribute multiplier) {
this.multiplier = multiplier;
}
@JsonIgnore
public void setMultiplier(double multiplier) {
this.multiplier.setValue(String.valueOf(multiplier));
}
InformationsquelleAutor der Frage gregwhitaker | 2011-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht notwendig, ändern Sie den Namen der Set-Methode um Unklarheiten zu vermeiden. Du bist sonst auf der rechten Spur mit
@JsonIgnore
. Mit@JsonIgnore
auf alle gleichnamigen Methoden, um ignoriert zu werden, die Sie verwenden müssen nicht die@JsonProperty
annotation.Hier ist ein einfaches Beispiel, um diesen Punkt zu demonstrieren.
Eingang.json:
{"value":"forty-two"}
Foo.java:
Wenn Sie nicht möchten, ändern Sie die unberührte POJO-defs mit ein Jackson-annotation, dann können Sie einen
MixIn
.InformationsquelleAutor der Antwort Programmer Bruce
Jackson > 2.4 Nutzung direkt :
InformationsquelleAutor der Antwort gribo
In Fällen, In denen @JsonIgnore nicht hilft (ich habe derzeit so einen Fall, bin aber noch unsicher der Grund), es ist auch möglich, mit @XmlTransient statt.
InformationsquelleAutor der Antwort lilalinux