2016-03-30 5 views
1

Wenn ich versuche Objekt von einem String deserialisieren und diese String enthält keine bestimmte Felder oder hat Felder, die nicht in meinem Objekt sind, Jackson Serializer ist völlig in Ordnung und erstellt nur mein Objekt mit null/Optional.empty() - Felder, auch unbekannte Eigenschaften ignorieren. Ich versuchte, Leser mit Eigenschaft FAIL_ON_UNKNOWN_PROPERTIES zu setzen, aber zu keinem Erfolg. Ich habe eine ziemlich einfache Jackson-Konfiguration, nicht viel neben dem Hinzufügen von Unterstützung für Java 8 und java.time.Jackson Deserializer nicht unbekannten Eigenschaften Fehler auf oder fehlende Werte

Edit:

public final ObjectReader reader; 
public final ObjectWriter writer; 

private JsonMapperTestInstance() { 
    ObjectMapper mapper = new JacksonConfiguration().objectMapper(); 
    reader = mapper.reader(); 
    writer = mapper.writer().withFeatures(SerializationFeature.INDENT_OUTPUT); 
} 
public <T> T deserialize(Class<T> actual, String serialized) throws IOException { 
    return reader.forType(actual).readValue(serialized); 
} 

JacksonConfiguration:

@Primary 
@Bean 
public ObjectMapper objectMapper() { 
    ObjectMapper mapper = new ObjectMapper(); 
    registerModules(mapper); 
    mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); 
    return mapper; 
} 
@Bean 
public JavaTimeModule javaTimeModule() { 
    return new JavaTimeModule(); 
} 
@Bean 
public Jdk8Module jdk8Module() { 
    return new Jdk8Module().configureAbsentsAsNulls(true); 
} 
private void registerModules(ObjectMapper mapper) { 
    mapper.registerModule(jdk8Module()); 
    mapper.registerModule(javaTimeModule()); 
} 
@Primary 
@Bean 
public ObjectWriter writer(ObjectMapper mapper) { 
    return mapper.writer(); 
} 
@Primary 
@Bean 
public ObjectReader reader(ObjectMapper mapper) { 
    return mapper.reader(); 
} 
+0

Gibt es Unterschiede bei der Verwendung von @JsonIgnoreProperties (ignoreUnknown = false) in Ihrer Klasse? – JustOneMoreQuestion

+2

Bitte Postleitzahl eingeben –

Antwort

0

Ich habe festgestellt, dass Anmerkung @JasonUnwrapped dieses Verhalten verursacht. Ohne ihn wirft Jackson die Eigenschaft auf das Grundstück "very_wrong_field", das zuvor still ignoriert wurde.

Verwandte Themen