Java模块中Jackson Databind无法访问Weapon类的问题求助
解决Java 11模块系统下Jackson反序列化的InaccessibleObjectException问题
问题根源
你遇到的InaccessibleObjectException是Java 9+模块系统的访问控制机制导致的:你的模块Milestone1没有将包含Weapon、Health类的Store包显式导出给com.fasterxml.jackson.databind模块,Jackson无法通过反射访问这些类。
解决步骤
- 找到项目根目录下的
module-info.java文件(如果没有,需要手动创建,这是Java模块系统的核心配置文件) - 修改模块导出声明,将
Store包定向导出给com.fasterxml.jackson.databind:module Milestone1 { // 仅允许jackson的databind模块访问Store包 exports Store to com.fasterxml.jackson.databind; // 如果还有其他需要Jackson访问的包,同理添加 // exports Other.Package to com.fasterxml.jackson.databind; // 声明对jackson模块的依赖 requires com.fasterxml.jackson.databind; } - 如果
Weapon、Health类分散在多个包中,要把所有相关包都按上述方式导出给com.fasterxml.jackson.databind。
补充说明
- 如果课程项目无需严格的模块隔离,也可以直接导出包给所有模块:
exports Store; - 确保你使用的Jackson版本(databind、core、annotations)为2.9及以上,这些版本对Java模块系统有完善支持。
内容的提问来源于stack exchange,提问作者GernoBre
相关产品推荐
相关产品推荐

