由于没赋值serialVersionUID 只是警告,不是错误,造成先前没留意设定serialVersionUID,网络两端上线运行一段时间也感觉正常。如果再增减修改field,没赋值好serialVersionUID,网络两端就不匹配。
解决步骤如下:serialver命令在jdk/bin目录,用于算出某类的serialVersionUID。
(1)用旧代码的类生成 serialVersionUID: serialver -classpath myjar-1.0.jar com.icegarden.myjar.MyDO
输出结果类似:com.icegarden.myjar.MyDO: static final long serialVersionUID = 2075130392266935898L;
(2)然后将这行代码复制到新代码上。
即是说, 如果要在序列化DO里增加/变化field,又要和旧的没有serialVersionUID的DO作兼容,可以用serialver算出旧DO的serialVersionUID,赋值给变化了的DO,这样两边就匹配了
其它说明:
(3)可能会造成两边不匹配的改动,最好是搭车在两端都停机发布时。如果按以上方法做,应该不需出现如此情形。
(4)如果其它field不变动时,增加由serialver自动生成serialVersionUID并不会造成不匹配的情况。
(5)相同的代码,用serialver生成的和用eclipse界面生成的,是一样的。