因此,我得到了这个属于外部库的类(所以我无法修改它):
@Configuration
@EnableWebMvc
@Slf4j
public class WebConfigParent implements WebMvcConfigurer {
private final ObjectMapper objectMapper;
public WebConfigParent(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ResourceHttpMessageConverter());
converters.add(new StringHttpMessageConverter());
converters.add(new ByteArrayHttpMessageConverter());
converters.add(mappingJackson2HttpMessageConverter());
}
@Bean //this is the issue!
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
现在,我的班级:
@Configuration
public class WebConfigChild extends WebConfigParent {
public WebConfigChild(ObjectMapper objectMapper) {
super(objectMapper);
}
失败原因:
无法注册类路径资源 [../WebConfigParent] 中定义的 bean“mappingJackson2HttpMessageConverter”。类路径资源 [../WebConfigChild.class] 中已定义同名 bean,并且已禁用覆盖。
考虑重命名其中一个 bean 或通过设置 spring.main.allow-bean-definition-overriding=true 来启用覆盖
我知道使用覆盖设置很危险(顺便说一句,它是有效的),但我不知道如何防止这种行为!我尝试在子类中重新定义该方法,如下所示:
@Bean(name="anotherMapper")
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
return super.mappingJackson2HttpMessageConverter();
}
但仍然是同样的错误...为什么??