作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用方法 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/
我想使用方法 canDeserialize,因为在反序列化时我想获取类型类以在自定义反序列化中应用,如下一个示例: public T deserialize(byte[] bytes) thr
我是一名优秀的程序员,十分优秀!