2017-10-24 11 views
1

XML을 deserialize하여 JSON으로 변환하려고합니다. 대부분의 경우 잘 작동합니다. POJO에 @JacksonXmlProperty 주석을 달았습니다. 그러나 우리에게는 문제를 일으키는 새로운 시나리오가 있습니다. 문제는 동일한 객체의 두 가지 컬렉션을 사용하지만 이름이 다릅니다. 이런@JacksonXmlProperty를 사용하여 동일한 객체의 다르게 명명 된 콜렉션을 deserialize하는 방법은 무엇입니까?

<Invoice> 
    <Payments> 
     <Payment> 
      <Amount> 
     </Payment> 
    </Payments> 
    <Refunds> 
     <Refund> 
      <Amount> 
     </Refund> 
    </Refunds> 
</Invoice> 

대응 POJO 모습 : 여기서

단순화 XML 입력이다

public class Invoice { 
    @JacksonXmlElementWrapper(localName = "Payments") 
    protected List<Payment> payments; 

    @JacksonXmlProperty(localName = "Refunds") 
    protected List<Payment> refunds; 
} 

이는 예외없이 직렬화하지만 환불 컬렉션에 환불 특성 모두 null의 .

환불 POJO를 만들지 않고이를 수행 할 수있는 방법이 있습니까?

답변

0

실제로 문제는 JacksonXML 주석과 다른 컬렉션에서 같은 개체를 사용하는 것이 아닙니다. 그것은이 같은 잘 작동

public class Invoice { 
    @JacksonXmlElementWrapper(localName = "Payments") 
    protected List<Payment> payments; 

    @JacksonXmlElementWrapper(localName = "Refunds") 
    protected List<Payment> refunds; 
} 

: 그것과 같이,뿐만 아니라 @JacksonXMLElementWrapper을해야하므로 환불도 모음입니다. 덧붙여, 단순히 지불을 확장하는 간단한 환불 클래스를 사용한 경우에도 작동합니다. 당신이 실제로 다른 수업을 원한다면.

public class Refund extends Payment { 
}