我的Spring Boot部分Converter不生效其余正常是什么原因?
问题根因
你当前遇到的问题核心来自两个错误配置:
- 所有手动
new出来的Converter实例不受Spring容器管理,@Autowired注解的Repo依赖不会被自动注入,属于无效实例 - 你自定义的
MyConversionService和WebMvcConfigurer中addFormatters方法绑定的Spring MVC默认ConversionService是两个完全独立的实例,两端注册的转换器互不连通,自然找不到对应转换规则
修复步骤
1. 统一Converter注册逻辑,全部使用Spring管理的Bean
修改MvcConfig配置,自动注入所有标注了@Component的Converter实例,同时将自定义ConversionService声明为Spring主Bean,避免多实例冲突:
@Configuration class MvcConfig( // Spring会自动扫描所有容器内的Converter实例注入到该列表 private val converters: List<Converter<*, *>> ) : WebMvcConfigurer { @Bean @Primary fun conversionService(): MyConversionService { val service = MyConversionService() // 把所有Converter统一注册到自定义ConversionService converters.forEach { service.addConverter(it) } return service } override fun addFormatters(registry: FormatterRegistry) { // 同步注册到Spring MVC的转换体系 converters.forEach { registry.addConverter(it) } super.addFormatters(registry) } }
2. 删除冗余无效代码
- 移除
MyConversionService类上的@Component注解,避免重复实例化 - 删除控制器里
conversionService.addConverter(DtoToReviewConverter())这行冗余代码,你注册的是手动new的无效实例
3. 调整控制器注入逻辑
直接注入ConversionService接口即可,Spring会自动选择你声明的@Primary自定义实例:
@RestController @RequestMapping("/review") class ReviewController( val reviewService: ReviewService, val conversionService: ConversionService ) { // 剩余业务代码无需改动 }
验证方式
启动项目后在控制器转换逻辑处打断点,查看conversionService的转换器列表,确认DtoToReviewConverter已被注册,且实例内的userRepo、productRepo属性已完成注入不为空即可。
内容的提问来源于stack exchange,提问作者ernie
相关产品推荐
相关产品推荐

