Sto utilizzando l'annotazione di Jackson @JsonIdentityInfo
per generare grafici di oggetti piacevoli.ID null quando si utilizza @JsonIdentityInfo Errore durante la deserializzazione
ho il seguente oggetto (che è un'entità Hibernate anche):
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class,
property="id")
public class MemberFieldDef implements Def
{
@Id @GeneratedValue(generator="myGen")
private String id;
....
}
Questa classe funziona bene durante la serializzazione, quando una parte di un oggetto grafico, ma quando voglio presentare una nuova entità transitoria attraverso Jackson, che non ha un ID e ha ancora
{
"id":null,
...
}
La deserializzazione fallisce con:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of VALUE_NULL token
at [Source: [email protected]; line: 1, column: 2] (through reference chain: net._95point2.sarbase.cohort.entity.MemberFieldDef["id"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:762)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)
at com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty.deserializeSetAndReturn(ObjectIdValueProperty.java:90)
at com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty.deserializeAndSet(ObjectIdValueProperty.java:82)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:306)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithObjectId(BeanDeserializerBase.java:1036)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:122)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3066)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2221)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:205)
Lo stacktrace mostra che Jackson non sta utilizzando il normale StringDeserializer - che restituisce null per un valore letterale null - ma utilizza lo ObjectIdValueProperty
che sembra non consentire i valori nulli.
Esiste una soluzione per gli oggetti transitori?
Ciao! Hai (per caso) trovato qualche soluzione? – LeoLozes
Solo per inviare un segnaposto noto come "NO_ID" o -1 sul filo che viene eliminato prima di persistere .... non il migliore: / –