750 Stimmen

Ignorieren neuer Felder in JSON-Objekten mit Jackson

Ich verwende die Jackson JSON-Bibliothek, um einige JSON-Objekte in POJO-Klassen in einer Android-Anwendung zu konvertieren. Das Problem ist, dass sich die JSON-Objekte ändern und neue Felder hinzugefügt werden können, während die Anwendung veröffentlicht wird, aber derzeit bricht es sogar, wenn ein einfaches String-Feld hinzugefügt wird, das sicher ignoriert werden kann.

Gibt es eine Möglichkeit, Jackson anzuweisen, neu hinzugefügte Felder zu ignorieren? (z. B. nicht existierende Felder in POJO-Objekten)? Ein globales Ignorieren wäre toll.

1035voto

Hadi Eskandari Punkte 24313

Jackson bietet eine Annotation, die auf Klassenebene verwendet werden kann ( JsonIgnoreProperties ).

Fügen Sie am Anfang Ihrer Klasse Folgendes hinzu ( pas zu einzelnen Methoden):

@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
    ...
}

Je nachdem, welche Jackson-Version Sie verwenden, müssten Sie in der aktuellen Version einen anderen Import verwenden:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

in älteren Versionen war dies der Fall:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;

571voto

StaxMan Punkte 107669

Zusätzlich zu den 2 bereits erwähnten Mechanismen gibt es auch eine globale Funktion, die zur Unterdrückung aller durch unbekannte (nicht zugeordnete) Eigenschaften verursachten Fehler verwendet werden kann:

// jackson 1.9 and before
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// or jackson 2.0
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Dies ist die Standardeinstellung, die verwendet wird, wenn keine Anmerkungen vorhanden sind, und kann eine bequeme Ausweichlösung sein.

162voto

Yves M. Punkte 28190

Aktuelle und vollständige Antwort mit Jackson 2


Verwendung von Kommentaren

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyMappingClass {

}

Siehe JsonIgnoreProperties in der Online-Dokumentation von Jackson.

Konfiguration verwenden

Weniger aufdringlich als Anmerkungen.

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

ObjectReader objectReader = objectMapper.reader(MyMappingClass.class);
MyMappingClass myMappingClass = objectReader.readValue(json);

Siehe FAIL_ON_UNKNOWN_PROPERTIES in der Online-Dokumentation von Jackson.

95voto

Amit Kaneria Punkte 4872

Dies kann auf 2 Arten erreicht werden:

  1. Markieren Sie das POJO, um unbekannte Eigenschaften zu ignorieren

    @JsonIgnoreProperties(ignoreUnknown = true)
  2. Konfigurieren Sie ObjectMapper, der die POJO/json wie unten beschrieben serialisiert/deserialisiert:

    ObjectMapper mapper =new ObjectMapper();            
    // for Jackson version 1.X        
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    // for Jackson version 2.X
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

35voto

Parul Punkte 331

@JsonIgnoreProperties(ignoreUnknown = true) hat für mich gut funktioniert. Ich habe eine Java-Anwendung, die auf Tomcat mit JDK 1.7 läuft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X