首页 > 编程语言 >Java serialVersionUID 作用和自动生成设置

Java serialVersionUID 作用和自动生成设置

时间:2023-04-07 11:14:42浏览次数:49  
标签:Java 兼容 自动 序列化 生成 serialVersionUID

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.点击回车 如下图所示
在这里插入图片描述
完工!!!
若对你有帮助,请点赞 + 收藏 + 关注,原创不易

标签:Java,兼容,自动,序列化,生成,serialVersionUID
From: https://www.cnblogs.com/sunny3158/p/17295549.html

相关文章

  • mybatis-plus 生成器
    依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency>......
  • java简易爬虫Crawler
    这是我的第一个java爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更......
  • java编程中的C/S模式和B/S模式
    随着社会信息的发展,Java技术已经无处不在,无论是手机软件、手机Java游戏还是电脑软件等,只要你使用到电子产品就会碰到和Java有关的东西,更多的企业正采用Java语言开发网站,越来越多的程序员也应声而起,在学习Java的过程中总会遇到这样或那样的问题,今天千锋小编就大家分享一下在C/S模式......
  • C# javascript中调用自定义函数function
    Default.aspx1<script>2//自定义函数3functionpageInit(){4letdata=[];5varsource_data=my_source_data2();//my_source_data2是一般程序Handler.ashx中,自定义的方法6varmy_data=source_data.split('###');......
  • Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
    JavaBasePooledObjectFactory对象池化技术通常一个对象创建、销毁非常耗时的时候,我们不会频繁的创建和销毁它,而是考虑复用。复用对象的一种做法就是对象池,将创建好的对象放入池中维护起来,下次再用的时候直接拿池中已经创建好的对象继续用,这就是池化的思想。ApacheCommonsPoo......
  • 001-java-markdown语法
    typora中的markdown语法一、标题: 最多支持六级标题文字,或者command+0~6调整标题级别command+/-调整级别一级标题:markdown学习二级标题三级标题四级标题五级标题六级标题 二、字体Hello,world!粗体字:两边加2个**/command+BHello,world!斜体字:两边加1个/comman......
  • Java面向对象继承
    继承的概念继承是面向对象编程中的一个概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类在继承父类的同时也可以添加自己的属性和方法,从而实现代码的复用和扩展。继承是面向对象编程的三大特征之一,其他两个分别是封装和多态。继承的作用1.提高代码的......
  • 输入数据有多组,每组测试数据有 2 行,第 1 行为 1 个正整数,表示所生成的随机数的个数:N
    #include<iostream>#include<string>usingnamespacestd;voidsort(strings){chartmp[100];intlen=s.size();intcount=0,i,j;for(i=0;i<len;i++){for(j=i+1;j<len;j++){i......
  • day01_Java语言概述
    对第一个java程序进行总结java程序编写-编译-运行的过程编写:我们将编写的java代码保存在以".java"结尾的源文件中编译:使用javac.exe命令编译我们的java源文件。格式:javac源文件名.java运行:使用java.exe命令解释运行我们的字节码文件。格式:java类名在一个java源文件中......
  • 万字详解 | Java 流式编程
    概述StreamAPI是Java中引入的一种新的数据处理方法。它提供了一种高效且易于使用的方法来处理数据集合。StreamAPI支持函数式编程,可以让我们以简洁、优雅的方式进行数据操作,还有使用Stream的两大原因:在大多数情况下,将对象存储在集合中就是为了处理它们,因此你会发现你把......