У меня есть несколько веб-приложений с весенней загрузкой и одна библиотека интеграции, используемая всеми веб-приложениями. Библиотека интеграции использует Spring для DI и определяет несколько собственных @Bean
с назначенными явными именами, в частности ObjectMapper
, используемый для выполнения собственной десериализации из вызовов API.
Вот определение bean-компонента ObjectMapper
в библиотеке интеграции (в классе @Configuration
):
@Bean(name = "Blah.APIObjectMapper")
public ObjectMapper blahAPIObjectMapper() {
ObjectMapper mapper = new ObjectMapper()
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
return mapper;
}
В другом месте библиотеки этот ObjectMapper
является @Autowired
с определенным @Qualifier
, например:
@Autowired
@Qualifier("Blah.APIObjectMapper")
private ObjectMapper blahAPIObjectMapper;
Проблема возникает в веб-приложениях. Этот пользовательский компонент ObjectMapper
, определенный в библиотеке интеграции, конфликтует с настроенным по умолчанию компонентом ObjectMapper
, который я не могу контролировать.
Ошибка:
org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем 'mappingJackson2HttpMessageConverter', определенным в ресурсе пути к классу [org/springframework/boot/autoconfigure/web/JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration.class]: неудовлетворенная зависимость выражается через аргумент конструктора с индексом 0 типа [com.fasterxml.jackson.databind.ObjectMapper]: : не определено квалификационного bean-компонента типа [com.fasterxml.jackson.databind.ObjectMapper]: ожидается один соответствующий bean-компонент, но найдено 2: Мля .APIObjectMapper,_halObjectMapper; вложенным исключением является org.springframework.beans.factory.NoUniqueBeanDefinitionException: Не определен соответствующий bean-компонент типа [com.fasterxml.jackson.databind.ObjectMapper]: ожидается один соответствующий bean-компонент, но найдено 2: Blah.APIObjectMapper,_halObjectMapper сильный>
Вопрос. Как предотвратить конфликт Blah.APIObjectMapper
библиотеки с ObjectMapper
по умолчанию для весенней загрузки, по-видимому, с именем _halObjectMapper
?
Я не использую XML-конфигурацию для Spring. Все основано на аннотациях.