gpt4 book ai didi

java - 如何使用 Jackson API 中的 canDeserialize ObjectMapper 类方法?

转载 作者:行者123 更新时间:2023-12-01 17:23:33 24 4
gpt4 key购买 nike

我想使用方法 canDeserialize,因为在反序列化时我想获取类型类以在自定义反序列化中应用,如下一个示例:

    public T deserialize(byte[] bytes) throws SerializationException {
bolean isAccount = this.objectMapper.canDeserialize(??????).
T t = null;

if(isAccount)
t = (T)this.objectMapper.readValue(bytes,Account.class);

else
t = (T) this.objectMapper.readValue(bytes, 0, bytes.length, new TypeReference<Object>(){});

return t;
}

在本例中,Account 类具有用于自定义反序列化的注释 @JsonDeserialize

最佳答案

要直接回答您的问题,请使用 canDeserialize 方法:

final ObjectMapper mapper = new ObjectMapper();
mapper.canDeserialize(mapper.constructType(Bean.class));

其中 Bean 是要检查的 Java 类的名称。

但是等等,您正在尝试解决错误的问题。您正在为您的方法的逻辑而苦苦挣扎,因为它的设计不正确。通过试图让 Java 运行时(和 Jackson 库)推断出有关要实例化的类型的所有必需信息(基于参数化返回),您确实对 Java 运行时(和 Jackson 库)提出了太多要求。为了解决这个问题,您应该将表示要反序列化的类型的类作为参数包含到方法中,从而大大简化逻辑:

public <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException,
JsonProcessingException {
return new ObjectMapper().readValue(bytes, clazz);
}

此时您可能已经意识到,上面的方法除了直接调用 ObjectMapper.readValue 之外,并没有提供其他功能,所以...就这样做!无需定义自定义方法,只需使用 ObjectMapper 即可。请记住,您不需要执行任何显式操作来触发类的自定义反序列化。 Jackson 运行时会自动检测类何时具有自定义反序列化器并调用它。

关于java - 如何使用 Jackson API 中的 canDeserialize ObjectMapper 类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16776910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com