Java serialVersionUID 作用和自动生成设置
原文链接:https://blog.csdn.net/plqwf19880902/article/details/129103336
一、由来
最近在做一个军工的项目,代码提交后,军方用代码安全扫描工具,对代码进行全局扫描,提示一个漏洞,导致原因是实体类实现了Serializable接口,未对serialVersionUID手动赋值,java机制里,当未对其赋值时,会自动生一个,但自动生成的不满足安全性要求,所以以后规避这个问题,大家还是添加serialVersionUID的值
二、serialVersionUID的作用
那么serialVersionUID是干什么用的呢?它是可序列化类中的版本标识,JVM用这个字段来确定是否能够反序列化出对象。换句话说,只有对象序列化后的二进制数据中的serialVersionUID与当前对象的serialVersionUID相同,反序列化才能成功,否则就会失败。
所以,当类做兼容性升级时,就不要更新serialVersionUID的值,只有在类发生根本改变的情况下才更新它。阿里Java手册中也如是说:
【强制】序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID值。
说明:注意serialVersionUID不一致会抛出序列化运行时异常。
三、不写serialVersionUID就没有吗
即使不写, jdk序列化时默认也会生成这个id, 反编译.class文件你也看不到这个值
rpc反序列化
如果使用jdk的方式, 这个必须配置
如果使用 hession, json string… 不是必须的
如果增加兼容的字段, serialVersionUID保持不变
如果增加不兼容的字段,serialVersionUID变, 要通知调用方更换jar
对外发布的jar, 还是手动加上,不要偷懒 出问题定位+更新发布的时间比手动加一下的时间多多了
四、如何在idea里自动设置serialVersionUID的值
1.在setting里输入:serialv
2.选中对应的类名,然后按 alt+enter 快捷键 的情况如下所示
,3.点击回车 如下图所示
完工!!!
若对你有帮助,请点赞 + 收藏 + 关注,原创不易
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2022-04-07 ELEMENTUI的表格树(树型结构表格),很简单方式,EL-TABLE只需要小小改动几个地方
2022-04-07 js中的foreach用法 array.forEach(function(element) { console.log(element); });
2022-04-07 Java过滤list空字符串
2022-04-07 java中String数组和List的互相转化 List<String> strsToList1= Arrays.asList(strs);
2022-04-07 JS数组转字符串(3种方法) arrays.join("-")把数组使用-分割为字符串
2022-04-07 vue使用el-tree实现全选、反选
2022-04-07 elementui tree怎样设置默认勾选,default-checked-keys绑定一个数组即可勾选默认值