简体   繁体   English

无法使用 Jackson 反序列化 XML 中的非格式化子节点

[英]Unable to deserialize non formatted child node in XML with Jackson

I am converting Xml to Pojo object with help of jackson, But due to different format of xml it's not converting all fields to Pojo, Please follow for xml structure and mapping Pojo,我在 jackson 的帮助下将 Xml 转换为 Pojo object,但是由于 xml 的格式不同,它没有将所有字段转换为 Pojo,请按照 xml 结构和映射 Pojo,

Here I want to deserialize 13 value of iphone.这里我想反序列化 13 值的 iphone。

XML- <PhoneDetails> <Iphone os="ios">13</Iphone> </PhoneDetails> XML- <PhoneDetails> <Iphone os="ios">13</Iphone> </PhoneDetails>

POJO POJO

@lombok.Data 
public class PhoneDetails { 
    @JacksonXmlProperty(localName = "Iphone") 
    private Iphone iphoneDetails; 
}

@lombok.Data 
public class Iphone { 
    private String os; 
    private String iphone; 
}

main method主要方法

public class Demo { 
    public static void main(String[] args) throws Exception { 
        XmlMapper xmlMapper = new XmlMapper();      
        xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
        xmlMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
        xmlMapper.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, false); 
        File availsContract = ResourceUtils.getFile("classpath:to_deserialize.xml");

        String content = new String(Files.readAllBytes(availsContract.toPath()));
        PhoneDetails productDetail = xmlMapper.readValue(content, PhoneDetails.class);
        System.out.println("Product Details :" + productDetail);
    }

}

Please reply with solutions.请回复解决方案。

Welcome to Stack Overflow, a simple xmlMapper mapper is enough to deserialize your xml;欢迎来到 Stack Overflow,一个简单的xmlMapper映射器就足以反序列化您的 xml; you have to use the JacksonXmlText annotation to deserialize the 13 value from the <PhoneDetails> <Iphone os="ios">13</Iphone> </PhoneDetails> xml file into your String iphone property:您必须使用JacksonXmlText注释将<PhoneDetails> <Iphone os="ios">13</Iphone> </PhoneDetails> xml 文件中的13值反序列化到您的 String iphone属性中:

@Data
public class PhoneDetails { 
   
    @JacksonXmlProperty(localName = "Iphone") 
    private Iphone iphoneDetails; 
}

@Data
public class Iphone {

    private String os;
    @JacksonXmlText
    private String iphone;
}

//Input xmlfile:
//<PhoneDetails> <Iphone os="ios">13</Iphone> </PhoneDetails>
XmlMapper xmlMapper = new XmlMapper();
PhoneDetails phoneDetails = xmlMapper.readValue(xml, PhoneDetails.class);
//ok, it prints PhoneDetails(iphoneDetails=Iphone(os=ios, iphone=13))
System.out.print(phoneDetails);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM