访问Bean时出现空指针异常,求排查配置类与模块代码问题
排查Bean注入时的空指针异常原因
我一眼就看到你配置类里的一个明显问题,这大概率就是空指针的根源:
先看你的TopLevelConfig中的myMapper方法代码:
@Configuration public class TopLevelConfig { @Bean public MyMapper myMapper() { MyMapper mapper = new MyMapper(); mapper.registerModule(new MetadataModule()); return new MyMapper(); // 这里是关键错误! } }
问题分析
你先创建了一个MyMapper实例mapper,并且给它注册了MetadataModule,但最后返回的却是一个全新的、完全未配置的MyMapper实例。这就导致Spring容器中管理的Bean根本不是你刚才配置好的那个——也就是说,你注册的MetadataModule完全没生效。
后续当你使用这个Bean时,MetadataModule里的setupModule逻辑(比如注册PayloadDeserializer的操作)根本没有被执行过。当代码尝试处理Payload类的反序列化时,找不到对应的反序列化器,或者相关的上下文对象因为未初始化而变为null,最终触发空指针异常。
修复方案
只需要把返回语句改成返回你已经配置好的mapper实例即可:
@Bean public MyMapper myMapper() { MyMapper mapper = new MyMapper(); mapper.registerModule(new MetadataModule()); return mapper; // 返回配置完成的实例 }
如果修复后仍然有空指针,你可以进一步检查MetadataModule的setupModule方法中是否有未判空的操作(比如setupContext是否可能为null),但目前来看,配置类里的返回错误是最直接的诱因。
内容的提问来源于stack exchange,提问作者user1692342
相关产品推荐
相关产品推荐

