2013-10-26 4 views
3

У меня есть класс контракта, содержащий элементы с тегами @XmlElement. Для exДжексон не смог рассмотреть @XmlElement при сериализации в JSON

@XmlElement(name = "balancemoney") 
protected Amount balanceMoney; 

Использование JAXBContext Я могу сгенерировать xml с соответствующими тегами.

Однако, когда я использую библиотеку джексон при условии, тег JSON еще приходит как «balanceMoney» вместо «» balancemoney

Как узнать, Джексон рассмотреть @XmlElement тег.

Ниже приведен код, который делает это.

//Function to display request object. 
public void displayXML(Object reqResp){ 
    try{ 
     JAXBContext jaxbContext = JAXBContext.newInstance(reqResp.getClass()); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     // output pretty printed 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     ByteArrayOutputStream bStream=new ByteArrayOutputStream(); 

     //jaxbMarshaller.marshal(reqResp, System.out); 
     jaxbMarshaller.marshal(reqResp,bStream); 

     logger.info(bStream.toString());  

     }catch(JAXBException e){ 
      logger.info(e.getMessage()); 
     } 
     logger.info("*** Payload is: " + reqResp.toString()); 
} 

//Function to display as JSON 
public void displayJSON(Object reqResp) throws JsonGenerationException, JsonMappingException, IOException{ 
    ObjectMapper mapper = new ObjectMapper(); 
    logger.info(mapper.defaultPrettyPrintingWriter().writeValueAsString(reqResp)); 

} 

ответ

3

Согласно : Включение JAXB поддержка аннотаций, вам необходимо установить mapper.getDeserializationConfig().setAnnotationIntrospector(new JaxbAnnotationIntrospector()); для того, чтобы Джексон использовать JAXB аннотации.

+0

Нет, похоже, это не помогает. – Gsb128379

1
  • Maven зависимостей - pom.xml:

    <dependency> 
        <groupId>com.fasterxml.jackson.module</groupId> 
        <artifactId>jackson-module-jaxb-annotations</artifactId> 
        <version>2.6.1</version> 
    </dependency> 
    
  • конфигурации пользовательских ObjectMapper (раскомментируйте все аннотации зарегистрировать этот картографа по умолчанию в Spring):

    //@Configuration 
    public class JacksonConfig { 
    
        //@Primary 
        //@Bean 
        public static ObjectMapper createCustomObjectMapper() { 
         ObjectMapper mapper = new ObjectMapper(); 
         AnnotationIntrospector aiJaxb = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); 
         AnnotationIntrospector aiJackson = new JacksonAnnotationIntrospector(); 
         // first Jaxb, second Jackson annotations 
         mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(aiJaxb, aiJackson)); 
         return mapper; 
        } 
    } 
    
  • Код для отображения как JSON:

    public void displayJSON(Object reqResp) throws JsonProcessingException{ 
        ObjectMapper mapper = JacksonConfig.createCustomObjectMapper(); 
        LOG.info(mapper.writeValueAsString(reqResp)); 
    } 
    
Смежные вопросы