2014-01-08 2 views
15

Ich habe die folgende einfache Klasse:JsonIgnoreProperties nicht funktioniert

import org.codehaus.jackson.annotate.JsonIgnoreProperties; 
@JsonIgnoreProperties({ "thirdField" }) 
public class Message { 

    private TypeA type; 
    private String producer; 

//Getters and Setters 

} 

in meiner Testklasse

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

public class Test { 
    public void testMethd() { 
    ObjectMapper objectMapper = new ObjectMapper(); 
    objectMapper.configure(MapperFeature.USE_ANNOTATIONS, true); 
    Class<T> instanceType = Message.class; 

    String msgBody = "{\"producer\": \"clientApp\", \"type\": \"aType\", \"thirdField\": []}"; 
    objectMapper.readValue(msgBody, instanceType); 
    } 
} 

Alles, was ich bin versucht, das oben json String in Nachrichtenklasse konvertieren und ignoriert die "Drittes Feld". Aber ich bekomme immer

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "thirdField" (class Message), not marked as ignorable (2 known properties: , "type", "producer"]) 

Antwort

33

Sie haben verschiedene Versionen von Jackson gemischt. Beachten Sie, dass Sie JsonIgnoreProperties von org.codehaus.jackson.annotate (Version 1.x) importieren, während Sie ObjectMapper von com.fasterxml.jackson.databind (Version 2.x) verwenden.

+1

Guter Fang. Ich habe es geändert, um com.fasterxml.jackson.annotation.JsonIgnoreProperties zu importieren; aber immer noch die gleiche Ausnahme – kk1957

+1

@ kk1957 Ich reproduziert Ihren Fall mit dem einzigen Unterschied, dass ich importiert JsonIgnoreProperties von com.fasterxml.jackson.annotation und es funktionierte - keine Ausnahmen, Nachricht Objekt wurde deserialized corctly. Versuchen Sie, https://github.com/LukaszWiktor/json-ignore-properties-test auszuchecken und Test.main() auszuführen. –

+0

Ja, es sieht so aus, als gäbe es andere Dinge in meinem Setup. Danke für die Hilfe. – kk1957

0

Es ist nicht für mich eine der funktionierten Über den Antworten habe ich eine Problemumgehung gefunden, dass ich das Objekt und die Werte reinitialisiert habe (kopierte das Objekt).

Verwandte Themen