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

Spring Boot 2.5.4 如何实现按名称而非类型自动注入同类型多Bean

Spring Boot 2.5.4 多同类型ObjectMapper Bean注入异常解决

问题复现

原始配置

自定义ObjectMapper Bean配置类:

@Configuration
public class MapperConfig {

    @Bean("yamlMapper")
    public ObjectMapper yamlMapper() {
        return new ObjectMapper(new YAMLFactory());
    }

    @Bean("jsonMapper")
    public ObjectMapper jsonMapper() {
        return new ObjectMapper();
    }

}

服务类注入代码:

@Service
@RequiredArgsConstructor
public class MapperService {

    @Qualifier("jsonMapper")
    private final ObjectMapper jsonMapper;

    @Qualifier("yamlMapper")
    private final ObjectMapper yamlMapper;

}

报错信息

启动后抛出如下异常:

No qualifying bean of type 'com.fasterxml.jackson.databind.ObjectMapper' available: expected single matching bean but found 2: yamlMapper,jsonMapper

根因分析

报错并非来自自定义的MapperService注入逻辑,而是Spring Boot自带的MappingJackson2HttpMessageConverterConfiguration类默认需要匹配唯一的ObjectMapper类型Bean,该类为框架内置类无法修改其注解配置,因此需要在自定义Bean中指定默认的主Bean供框架底层注入使用。

解决方案

通过@Primary注解指定jsonMapper作为默认的ObjectMapper主Bean即可解决冲突,调整后可正常加载上下文的配置如下:

调整后的配置类

@Configuration
public class MapperConfig {

    @Bean
    public ObjectMapper yamlMapper() {
        return new ObjectMapper(new YAMLFactory());
    }

    @Bean
    @Primary
    public ObjectMapper jsonMapper() {
        return new ObjectMapper();
    }

}

调整后的服务类

@Service
@RequiredArgsConstructor
public class MapperService {

    @Autowired
    @Qualifier("jsonMapper")
    private final ObjectMapper jsonMapper;

    @Autowired
    @Qualifier("yamlMapper")
    private final ObjectMapper yamlMapper;

}

内容的提问来源于stack exchange,提问作者Liam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:05