J'essaye de désérialiser json en écrivant deserializer personnalisé. Voici mon code.Ajout de la classe de désérialisation personnalisée à l'annotation déjà existante @JsonDeserialize en utilisant jackson
public class EventLoginDeserializer extends StdDeserializer<EventLogin> {
public EventLoginDeserializer() {
this(null);
}
public EventLoginDeserializer(Class<EventLogin> event) {
super(event);
}
@Override
public EventLogin deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
JsonNode jsonNode = jsonParser.getCodec().readTree(jsonParser);
return EventLogin.builder().displayName(jsonNode.get("display_name"))
.timestamp(DateTime.now()).build();
}
@Override
public Class<EventLogin> handledType() {
return EventLogin.class;
}
}
Et voici l'extrait de ma classe principale.
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
SimpleModule module = new SimpleModule();
module.addDeserializer(EventLogin.class, new EventLoginDeserializer());
mapper.registerModule(module);
String json = "{\"display_name\": \"Test Deserialization\", \"user_name\": \"test\"}";
EventLogin eventLogin = mapper.readValue(json, EventLogin.class);
System.out.println("readValue :::: " + eventLogin);
J'ai une exigence où je en ai prendre une classe de modèle annoté @JsonDeserialize déjà existant dans le fichier jar et ajouter une classe de désérialisation ci-dessus. Je voulais dire ici est la même chose de la classe déjà existante dans un fichier source.
@AutoValue
@JsonDeserialize(builder = AutoValue_EventLogin.Builder.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
public abstract class EventLogin
{
public abstract String displayName();
public abstract DateTime timestamp();
@AutoValue.Builder
public abstract static class Builder implements Login.Builder<Builder> {
public abstract Builder displayName(String displayName);
public abstract Builder emailId(DateTime timestamp);
public abstract EventLogin build();
}
}
Le problème est que depuis @JsonDeserialize existe déjà dans le fichier jar, ajoutant ainsi désérialiseur sur mesure n'a pas été considéré comme étant du tout. En d'autres termes, la méthode deserialize substituée, la classe deserializer personnalisée n'est pas exécutée.
Alors comment surmonter ce problème? Merci d'avance.