Benutzerdefinierte Deserialisierung mit Standardverhalten in Jackson
Bei der Implementierung eines benutzerdefinierten Deserialisierers in Jackson kann es erforderlich sein, den Standard-Deserialisierer zu verwenden, um Füllen Sie ein Objekt, bevor Sie benutzerdefinierte Logik anwenden. In diesem Artikel geht es um die Herausforderung, von einem benutzerdefinierten auf den Standard-Deserializer zuzugreifen.
Um dies zu erreichen, erstellen Sie einen BeanDeserializerModifier und registrieren Sie ihn mit einem SimpleModule. Hier ist ein Beispiel:
public class UserEventDeserializer extends StdDeserializer<User> implements ResolvableDeserializer { private static final long serialVersionUID = 7923585097068641765L; private final JsonDeserializer<?> defaultDeserializer; public UserEventDeserializer(JsonDeserializer<?> defaultDeserializer) { super(User.class); this.defaultDeserializer = defaultDeserializer; } @Override public User deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { User deserializedUser = (User) defaultDeserializer.deserialize(jp, ctxt); // Special logic return deserializedUser; } @Override public void resolve(DeserializationContext ctxt) throws JsonMappingException { ((ResolvableDeserializer) defaultDeserializer).resolve(ctxt); } public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new BeanDeserializerModifier() { @Override public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) { if (beanDesc.getBeanClass() == User.class) return new UserEventDeserializer(deserializer); return deserializer; } }); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(module); User user = mapper.readValue(new File("test.json"), User.class); } }
In diesem Beispiel:
Durch die Registrierung dieses Moduls bei einem ObjectMapper erfolgt die benutzerdefinierte Deserialisierung Logik kann verwendet werden und dennoch vom Standardverhalten für andere Klassen profitieren.
Das obige ist der detaillierte Inhalt vonWie kann ich das Standard-Deserialisierungsverhalten innerhalb eines benutzerdefinierten Jackson-Deserialisierers nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!