Je veux créer mon propre jackson
ObjectMapper
haricot, comme suit:Comment forcer Jackson2ObjectMapperBuilder dans spring-boot?
@SpringBootApplication
@AutoConfigureBefore(JacksonAutoConfiguration.class) //even this does not help
public class MyConfig extends SpringBootServletInitializer {
@Bean
@Primary
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
return builder.createXmlMapper(true).build(); //much more configurations
}
}
Problème: le haricot est jamais créé, mais la valeur par défaut JacksonAutoConfiguration
est exécuté:
package org.springframework.boot.autoconfigure.jackson;
@Configuration
@ConditionalOnClass(ObjectMapper.class)
public class JacksonAutoConfiguration {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
return builder.createXmlMapper(false).build(); //this is always executed!
}
}
donc en quelque sorte le haricot ObjectMapper
n'est pas encore présent lorsque JacksonAutoConfiguration
est évalué. Mais pourquoi? En déboguant avec des points d'arrêt, je peux également voir que mon bean est jamais invoqué! MAIS ce que j'ai remarqué: même si j'ai le @AutoConfigureBefore
, le jackson autoconfig est toujours exécuté avant l'un des haricots en MyConfig
. Étrange?
Juste pour clarifier: vous avez placé le point d'arrêt du débogueur là et il n'est jamais invoqué, n'est-ce pas? – Andremoniy
Exactement, mon bean 'ObjectMapper' est complètement négligé (ce qui n'est pas le cas pour tous les autres beans de la même classe' MyConfig') – membersound
Pouvez-vous fournir plus de contexte pour votre question? D'après ce que vous avez montré, il n'est pas clair que 'MyConfig' devrait être utilisé.Exécutez-vous votre application comme un pot, une guerre, dans votre EDI, quelque chose d'autre? A quoi ressemble sa méthode principale si elle en a un? [Exemple minimal, complet, vérifiable] (/ help/mcve) rendrait les choses beaucoup plus claires –