Wie Deserialisieren Jackson Json NULL-String zu Datum mit JsonFormat
Habe ich viel, aber konnte immer noch nicht die Antwort bekommen, so weit, jede Hilfe wird wirklich geschätzt!
Habe ich eine einfache String
zu Date
Feld-mapping und versuche zu Lesen ein JSON-string an Java-Objekt.
@JsonInclude(value=Include.NON_EMPTY)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MMM-yyyy", timezone="PST")
protected Date eolAnnounceDate;
Aber ich bin immer folgende exception, wenn die JSON-Zeichenfolge ist leer.
Können Sie mir jemand sagen wie man das umgehen kann? Ich habe versucht ein paar Optionen, aber Sie alle sind für die Serialisierung.
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(Include.NON_NULL);
objectMapper.setSerializationInclusion(Include.NON_EMPTY);
Ausnahme :
java.lang.IllegalArgumentException: Failed to parse Date-Wert 'NULL' (format: "dd-MMM-yyyy"): Unparseable date: "NULL"
com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:180)
com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:279)
com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:260)
com.fasterxml.jackson.databind-Methode.deser.SettableBeanProperty.Deserialisieren(SettableBeanProperty.java:464)
com.fasterxml.jackson.databind-Methode.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
com.fasterxml.jackson.databind-Methode.deser.BeanDeserializer.Deserialisieren(BeanDeserializer.java:121)
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:230)
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:207)
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
com.fasterxml.jackson.databind-Methode.deser.SettableBeanProperty.Deserialisieren(SettableBeanProperty.java:464)
com.fasterxml.jackson.databind-Methode.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
com.fasterxml.jackson.databind-Methode.deser.BeanDeserializer.Deserialisieren(BeanDeserializer.java:121)
com.fasterxml.jackson.databind-Methode.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
com.fasterxml.jackson.databind-Methode.ObjectMapper.readValue(ObjectMapper.java:2034)
com.cisco.cre.dao.impl.ElasticsearchDAOImpl.getListByIdsFilter(ElasticsearchDAOImpl.java:94)
Dank
- Atul
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist nicht, dass ein null-Wert übergeben wird in das JSON-Format. Das problem ist, dass die JSON-enthält eine Zeichenfolge, die den Wert
"NULL"
.So, um dieses Problem zu beheben gibt es eine Reihe von verfügbaren Ansätze. Ich denke, dass die beiden folgenden Arbeit wird diesem Fall.
Alternative 1: Befestigen Sie die JSON -
Die erste alternative ist, zu beheben, JSON, so dass es nicht enthalten, der string-Wert
"NULL"
und stattdessen der Wertnull
(nicht zitiert) oder einfach zu überspringen.Stellen Sie sich die folgenden POJO:
Folgende test zeigt, dass gültige Daten, werden leere Werte und
null
Werte:Allerdings, wenn Sie gehen entlang den Wert
"NULL"
schlägt der test fehl, da"NULL"
können nicht analysiert werden, wie ein Datum:Alternative 2: bieten Sie Ihren eigenen Konverter mit, dass die Griffe
"NULL"
Wenn es nicht möglich ist, zu beheben, JSON (wie unter alternative 1) Sie können Ihre eigene Konverter.
Setup Ihre pojo wie dieses, statt:
Und Konverter, entlang der Linien von:
Dann, Sie sollten alle gesetzt. Den folgenden test bestanden:
IMO der beste Ansatz ist die Verwendung von alternative 1, wo Sie einfach die JSON.