2013-10-26 4 views
3

@XmlElement 태그가있는 요소가 포함 된 계약 클래스가 있습니다. 예를 들어JSON에 직렬화하는 동안 Jackson이 @XmlElement를 고려하지 못함

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

나는 적절한 태그를 사용하여 XML을 생성 할 수 있습니다. 내가 사용하는 경우

그러나, 잭슨은 JSON 태그는 여전히 대신 'balancemoney'나는 @XmlElement 태그를 고려 잭슨을 어떻게 알 수 있습니까

의 'balanceMoney'로 제공, 라이브러리를 제공했다.

아래 코드는이 작업을 수행하는 코드입니다. 에 따르면

//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 주석 지원 활성화, 당신은 JAXB 주석을 사용 잭슨 수 있도록 mapper.getDeserializationConfig().setAnnotationIntrospector(new JaxbAnnotationIntrospector());를 설정해야합니다.

+0

아니, 그게 도움이되지 않는 것 같습니다. – Gsb128379

1
  • 메이븐 의존성 - pom.xml 파일 (모든 주석이 봄에서 기본적으로이 매퍼를 등록하는 주석)

    <dependency> 
        <groupId>com.fasterxml.jackson.module</groupId> 
        <artifactId>jackson-module-jaxb-annotations</artifactId> 
        <version>2.6.1</version> 
    </dependency> 
    
  • 사용자 정의 ObjectMapper 구성 :

    //@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)); 
    } 
    
관련 문제