这一节主要是介绍泛型强制类型转换。所产生的一些坑。一开始我还以为是jason转换的原因。因为之前配置的实体里面手动写的方法都生成了相应的属性,但是这次却没有,所以我一开始还以为是杰森。反虚化的原因。去直到我一步步锻炼去调试。会相应的问题才发现是类型转换异常。
添一部分json序列化的代码。
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
MAPPER.setSerializationInclusion(Include.NON_NULL);
}
/**
* Convert target object to json string.
*
* @param obj target object.
* @return converted json string.
*/
public static String getJsonFromObject(Object obj) {
try {
return MAPPER.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new IllegalStateException("Fail to convert '" + obj + "' to String.", e);
}
}
这是我手动定义的。手动配置的转换格式的方法
@ApiModelProperty(value = "文件大小默认字节", example = "21M")
@JsonSerialize(using = FileSizeToStandardStrConverter.class)
public Long getFileLengthFormat() {
return fileLength;
}
明明我这个实体类有这个方法。但是当我去断点调试的时候,我想去查看这个方法说法没的属性值的时候就发现无法调用。这个方法提示没有检测到这个实例方法,这就非常的奇怪。我还以为是我的测试类的问题。然后我以为我又mock了,但实际我查看代码上不存在这种情况。
然后我就直接用一个代码执行窗口来检测相应的结果。居然也是一模一样的。
最后我实在没有办法,干脆在代码里面直接让程序跑这段代码result.get(0).getFileLengthFormat()
,看一下他到底会出现什么错误。
然后我就发现了非常常见的一个异常ClassCastException
类型转换异常。然后我就非常疑惑。什么时候我开始定义的一个这个类他支持这个方法的,而且是我亲自写的这个方法,但是确抛出了异常。
最后我再仔细回到断点的的地方,却发现原来这个类的引用是另外一个类。好的,到此真相大白。一开始我以为是json转换的问题。没想到后面是类型转换。
但是这里又有一个点,明明两个类之间没有互相关联,但它只是会有一些公共的属性是相同的。但是他却没有提示一些类型转换异常,直到你去调用相应的一些。不存在的方法的时候才会出现好坑啊。我这里引用的类是FileFavorite
但实际我定义的类叫FileFavoriteVo
太让人迷惑了。
最后我想说的在吧,就像渡劫一样,也只有经过了九九八十一难。然后你的代码才会顺风顺水,有一些坑在所难免。你只有亲自去踩过,你才知道。有一些代码异常在这个作者看来,他认为是正常的,但是应用到实际的业务当中。就感觉匪夷所思,明明这里应该抛出一个异常的,但没有抛出异常。
最后
点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。