如何在Jackson的自定义解串器中调用默认解串器

如何在Jackson的自定义解串器中调用默认解串器,第1张

如何在Jackson的自定义解串器中调用默认解串器

正如StaxMan已经建议的那样,您可以通过编写a

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;  }  // for some reason you have to implement ResolvableDeserializer when modifying BeanDeserializer  // otherwise deserializing throws JsonMappingException??  @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);  }}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/4982466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存