On m'a demandé de modifier notre configuration de mappage jackson afin que chaque objet vide que nous désérialisons (à partir de JSON) soit désérialisé en tant que null.
Le problème est que je m'efforce de le faire, mais sans succès. Voici un exemple de notre ObjectMapper
configuration (et exemple) :
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME));
javaTimeModule.addDeserializer(Instant.class, InstantDeserializer.INSTANT);
mapper.registerModule(javaTimeModule);
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
warmupMapper(mapper);
return mapper;
J'ai pensé à quelque chose comme ajouter :
mapper.configure(
DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
mais ça ne fonctionne que sur les cordes.
J'ai peur que l'utilisation d'un désérialiseur personnalisé ne m'aide pas, car j'écris un mappeur générique (pour tous les objets). J'ai donc probablement besoin de quelque chose comme un délégant ou une méthode de désérialisation post-processus.
Donc pour json comme ""
o {}
Je m'attends à être converti en null
en java (et non pas à une chaîne vide ou à une Object
instance).