我想使用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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Account类具有@JsonDeserialize注释,用于自定义反序列化。
要直接回答您的问题,这是您使用canDeserialize方法的方式:
final ObjectMapper mapper = new ObjectMapper();
mapper.canDeserialize(mapper.constructType(Bean.class));
Run Code Online (Sandbox Code Playgroud)
Bean您要检查的Java类的名称在哪里。
但是,等等,您正在尝试解决错误的问题。您正在为方法的逻辑而苦苦挣扎,因为它的设计不正确。通过尝试使它们推断有关要实例化的类型的所有必需信息(基于参数化的返回值),您确实对Java运行时(和Jackson库)有太多的要求。为了解决这个问题,您应该包含表示要反序列化的类型的类,作为该方法的参数,从而大大简化了逻辑:
public <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException,
JsonProcessingException {
return new ObjectMapper().readValue(bytes, clazz);
}
Run Code Online (Sandbox Code Playgroud)
至此,您可能已经意识到,上面的方法除了ObjectMapper.readValue直接调用之外,没有提供其他功能,所以…… 就这样做吧!无需定义自定义方法,只需使用ObjectMapper就可以了。请记住,您无需执行任何显式操作即可触发类的自定义反序列化。Jackson运行时会自动检测类何时具有自定义反序列化器并对其进行调用。
| 归档时间: |
|
| 查看次数: |
4197 次 |
| 最近记录: |