2017-09-15 2 views
0

J'ai la configuration du haricot jackson ci-dessous. Comment puis-je ajouter la fonctionnalité ToXmlGenerator.Feature.WRITE_XML_DECLARATION au constructeur?Comment ajouter ToXmlGenerator.Feature à Jackson2ObjectMapperBuilderCustomizer?

Ce qui suit ne fonctionne pas:

@Bean 
public Jackson2ObjectMapperBuilderCustomizer initJackson() { 
    return (builder) -> builder.modules(new JaxbAnnotationModule()) 
       .defaultUseWrapper(false) 
       .featuresToEnable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION); //invalid! 

} 

Résultat:

Constructor a jeté exception; exception imbriquée est org.springframework.beans.factory.BeanCreationException: Erreur création d'haricot avec le nom 'mappingJackson2XmlHttpMessageConverter' défini dans la ressource de chemin de classe [org/springframework/boot/autoconfiguration/web/JacksonHttpMessageConvertersConfiguration $ MappingJackson2XmlHttpMessageConverterConfiguration.class]: Bean l'instanciation via la méthode d'usine a échoué; exception imbriquée est org.springframework.beans.BeanInstantiationException: Impossible de instancier [org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter]: méthode Factory 'mappingJackson2XmlHttpMessageConverter' a lancé exception; exception imbriquée est org.springframework.beans.FatalBeanException: classe d'entités Unknown: com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator $ Caractéristiques

Mon objectif initial est d'ajouter la ligne suivante lors de la désérialisation:

<?xml version="1.0" encoding="UTF-8"?>.

Peut-être qu'il y a une manière différente au lieu d'utiliser le ToXmlGenerator?

J'ai aussi essayé ce qui suit, mais cela ne pas non plus ajouter la ligne de déclaration xml:

@Bean 
@Primary 
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { 
    XmlMapper mapper = (XmlMapper) builder 
      .createXmlMapper(true) 
      .build(); 

    mapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); 
    return mapper; 
} 

Répondre

0

Il était proche, mais l'utilisation ObjectMapper pour la sérialisation de Java Beans à xml n'est pas celui de la question . Au lieu de Jackson2ObjectMapperBuilderCustomizer, un nouveau mappeur est créé par autoconfiguration de printemps. Ceci doit être remplacé comme suit:

@Bean 
public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter(
     Jackson2ObjectMapperBuilder builder) { 
    ObjectMapper mapper = builder.createXmlMapper(true).build(); 
    ((XmlMapper) mapper).enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION); 
    return new MappingJackson2XmlHttpMessageConverter(mapper); 
}