You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 04:36:05