Jackson 中具有預設行為的自訂反序列化
在Jackson 中實現自訂反序列化器時,可能需要利用預設反序列化器來預先在應用自訂邏輯之前填入物件。本文解決了從自訂反序列化器存取預設反序列化器的挑戰。
要實現這一目標,請建立一個 BeanDeserializerModifier 並使用 SimpleModule 註冊它。這是一個範例:
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); } }
在這個範例中:
透過註冊此模組ObjectMapper,可以使用自訂反序列化邏輯,同時仍然受益於其他類別的預設行為。
以上是如何利用自訂 Jackson 反序列化器中的預設反序列化行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!