1019 Stimmen

Jackson mit JSON: Unerkanntes Feld, nicht als ignorierbar markiert

Ich muss eine bestimmte JSON-Zeichenfolge in ein Java-Objekt konvertieren. Ich verwende Jackson für die JSON-Verarbeitung. Ich habe keine Kontrolle über die JSON-Eingabe (ich lese von einem Webdienst). Dies ist meine Eingabe JSON:

{"wrapper":[{"id":"13","name":"Fred"}]}

Hier ist ein vereinfachter Anwendungsfall:

private void tryReading() {
    String jsonStr = "{\"wrapper\"\:[{\"id\":\"13\",\"name\":\"Fred\"}]}";
    ObjectMapper mapper = new ObjectMapper();  
    Wrapper wrapper = null;
    try {
        wrapper = mapper.readValue(jsonStr , Wrapper.class);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("wrapper = " + wrapper);
}

Meine Entitätsklasse ist:

public Class Student { 
    private String name;
    private String id;
    //getters & setters for name & id here
}

Meine Wrapper-Klasse ist im Grunde ein Container-Objekt, um meine Liste der Schüler zu erhalten:

public Class Wrapper {
    private List<Student> students;
    //getters & setters here
}

Ich erhalte immer wieder diesen Fehler und "wrapper" gibt zurück null . Ich bin mir nicht sicher, was fehlt. Kann mir bitte jemand helfen?

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 
    Unrecognized field "wrapper" (Class Wrapper), not marked as ignorable
 at [Source: java.io.StringReader@1198891; line: 1, column: 13] 
    (through reference chain: Wrapper["wrapper"])
 at org.codehaus.jackson.map.exc.UnrecognizedPropertyException
    .from(UnrecognizedPropertyException.java:53)

71voto

ddc Punkte 729

Das Hinzufügen von Settern und Gettern löste das Problem Was ich als das eigentliche Problem empfand, war die Frage, wie man es lösen kann, aber nicht, wie man den Fehler unterdrücken/ignorieren kann. Ich bekam den Fehler " Unerkanntes Feld.. nicht als ignorierbar markiert.. "

Obwohl ich die folgende Anmerkung oben auf die Klasse war es nicht in der Lage, das Json-Objekt zu analysieren und geben Sie mir die Eingabe

@JsonIgnoreProperties(ignoreUnknown = true)

Dann wurde mir klar, dass ich keine Setter und Getter hinzugefügt hatte. Nachdem ich Setter und Getter zum "Wrapper" und zum "Student" hinzugefügt hatte, funktionierte alles wie am Schnürchen.

47voto

Felix Kimutua Punkte 485

Das hat bei mir einfach perfekt funktioniert

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

@JsonIgnoreProperties(ignoreUnknown = true) Anmerkung nicht.

44voto

Karan Punkte 371

Dies funktioniert besser als All please refer to this property.

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

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    projectVO = objectMapper.readValue(yourjsonstring, Test.class);

35voto

Aalkhodiry Punkte 2073

Wenn Sie Jackson 2.0 verwenden

ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

26voto

tomrozb Punkte 24642

Selon le doc können Sie ausgewählte Felder oder alle unbekannten Felder ignorieren:

 // to prevent specified fields from being serialized or deserialized
 // (i.e. not include in JSON output; or being set even if they were included)
 @JsonIgnoreProperties({ "internalId", "secretKey" })

 // To ignore any unknown properties in JSON input without exception:
 @JsonIgnoreProperties(ignoreUnknown=true)

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