1.业务场景

公司开发一些接口,数据返回时有的采用了ResultModel<List<Map<String,Integer>>Map<String,Integer>这样的数据结构返回,采用JDk8及一下版本,不会出现标题所属问题。而随着项目升级,公司采用了JDK21版本,结果出现返回map时Unable to make field private static final long java.util.HashMap.serialVersionUID accessib.

2.问题解释

这里主要问题就是讲的:在Java中,当你尝试通过反射(Reflection)访问一个类的私有(private)成员(如字段、方法等)时,如果没有足够的权限(即没有使用正确的访问控制标志),你会遇IllegalAccessException。这个异常表明你试图违反Java的访问控制规则。

你也许会很惊讶,我只是返回了一个map结构呀,我干啥了我。别急,你细看map底层,当你使用map时,都是实现什么new hashMap<>()/new CurrentMapo new LinkedHashMap<>()并且还有个序列化的版本号
在这里插入图片描述

3.问题分析

主要是JDK9以后,有一个新特性叫做模块化,具体请查看大佬写的博客JDk9模块化

4.问题解决

首先配置下环境变量

在这里插入图片描述具体:Edit Configuratiuons -----> Modify options ----->勾选add VM Options------->在这个框里面补充以下命令

补充的运行条件

--add-opens
java.base/java.lang=ALL-UNNAMED
--add-opens
java.base/java.lang.reflect=ALL-UNNAMED
--add-opens
java.base/java.lang.invoke=ALL-UNNAMED
--add-opens
java.base/java.math=ALL-UNNAMED
--add-opens
java.base/sun.net.util=ALL-UNNAMED
--add-opens
java.base/java.io=ALL-UNNAMED
--add-opens
java.base/java.net=ALL-UNNAMED
--add-opens
java.base/java.nio=ALL-UNNAMED
--add-opens
java.base/java.security=ALL-UNNAMED
--add-opens
java.base/java.text=ALL-UNNAMED
--add-opens
java.base/java.time=ALL-UNNAMED
--add-opens
java.base/java.util=ALL-UNNAMED

最后,别忘记了点击保存哈,运行看看,是不是很OK;感谢阅读,觉得有用,点个关注多转发,您的支持是我最大的动力!!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐