【Bug】Unable to make field private final int java.time.LocalDate.year accessible

问题描述

在使用这段代码时new Gson().toJson(result),会出现如下异常

c 复制代码
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field private final int java.time.LocalDate.year accessible: module java.base does not "opens java.time" to unnamed module @2d9d4f9d
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
	at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
	at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
	at com.google.gson.internal.reflect.UnsafeReflectionAccessor.makeAccessible(UnsafeReflectionAccessor.java:44)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:159)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
	at com.google.gson.Gson.getAdapter(Gson.java:489)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
	at com.google.gson.Gson.getAdapter(Gson.java:489)
	at com.google.gson.Gson.toJson(Gson.java:727)
	at com.google.gson.Gson.toJson(Gson.java:714)
	at com.google.gson.Gson.toJson(Gson.java:669)
	at com.google.gson.Gson.toJson(Gson.java:649)
	at com.example.demo.config.GsonConfig.main(GsonConfig.java:85)

原因分析:

gson不能使用反射,将LocalDate,LocalDateTime等时间类型反射调用;

请检查一下,你的项目JDK的版本是否是JDK9以上(Gson 是通过反射的方式来访问相关的属性的,而这一方式在 JDK 9 开始就已经被禁用了);


解决方案:

有两种解决方式:

1.使用jdk1.8版本;

2.在java启动命令行添加:--add-opens java.base/java.time=ALL-UNNAMED虚拟机选项(VM Options)来使得反射功能能够正常使用

相关推荐
拾忆,想起14 分钟前
Redis发布订阅:实时消息系统的极简解决方案
java·开发语言·数据库·redis·后端·缓存·性能优化
AllyLi022424 分钟前
CondaError: Run ‘conda init‘ before ‘conda activate‘
linux·开发语言·笔记·python
艾莉丝努力练剑26 分钟前
【C语言16天强化训练】从基础入门到进阶:Day 14
java·c语言·学习·算法
羑悻的小杀马特27 分钟前
【C++高并发内存池篇】ThreadCache 极速引擎:C++ 高并发内存池的纳秒级无锁革命!
开发语言·c++·多线程·高性能内存池
BioRunYiXue35 分钟前
FRET、PLA、Co-IP和GST pull-down有何区别? 应该如何选择?
java·服务器·网络·人工智能·网络协议·tcp/ip·eclipse
SimonKing43 分钟前
想搭建知识库?Dify、MaxKB、Pandawiki 到底哪家强?
java·后端·程序员
程序员清风1 小时前
为什么Tomcat可以把线程数设置为200,而不是2N?
java·后端·面试
用户0332126663671 小时前
掌控演示文稿视觉:Java 如何为 PowerPoint 设置背景
java
布朗克1681 小时前
OpenTelemetry 在 Spring Boot 项目中的3种集成方式
java·开发语言·opentelemetry