jakson實體類轉成XML

@Data
@JacksonXmlRootElement(localName = "service")
public class XmlService {
    @JacksonXmlProperty(localName = "SYS_HEAD")
    private SysHeader sysHeader;

    @JacksonXmlProperty(localName = "LOCAL_HEAD")
    private LocalHeader localHeader;

    @JacksonXmlProperty(localName = "APP_HEAD")
    private AppHeader appHeader;

    @JacksonXmlProperty(localName = "BODY")
    private RequestBody requestBody;

}
<?xml version='1.0' encoding='UTF-8'?>
<
service> <SYS_HEAD> <TranTime>2023-06-07 14:53:35</TranTime> </SYS_HEAD> <LOCAL_HEAD/> <APP_HEAD/> <BODY> <BusStrip>04</BusStrip> </BODY> </service>

上面是實體類轉換成XML,對應的關係

轉換關鍵代碼是:

//請求首字母大寫

xmlMapper.setPropertyNamingStrategy(UPPER_CAMEL_CASE);

//請求頭 <?xml version='1.0' encoding='UTF-8'?>

xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true)

// 請求格式化輸出 ,writerWithDefaultPrettyPrinter()

xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(test);

 

 private static String printXml(XmlService test) {
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.setPropertyNamingStrategy(UPPER_CAMEL_CASE);
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        // 格式化輸出
        String xmlStr = null;
        try {
            xmlStr = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(test);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        log.info("定製xml格式化輸出:\n{}", xmlStr);
        return xmlStr;
    }

 

 這個是解析XML獲取裏面對應的數據

    xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<service>\n" +
                "\t<SYS_HEAD>\n" +
                "\t\t<ServiceCode></ServiceCode>\n" +
                "\t\t<ServiceScene></ServiceScene>\n" +
                "\t\t<ConsumerId></ConsumerId>\n" +
                "\t\t<ConsumerSeqNo></ConsumerSeqNo>\n" +
                "\t\t<TranDate>20141029</TranDate>\n" +
                "\t\t<TranTime>143238</TranTime>\n" +
                "\t\t<ServSeqNo></ServSeqNo>\n" +
                "\t\t<ReturnStatus>F</ReturnStatus>\n" +
                "\t\t<array>\n" +
                "\t\t\t<Ret>\n" +
                "\t\t\t\t<ReturnCode>10242100008042</ReturnCode>\n" +
                "\t\t\t\t<ReturnMsg>協議讀取數據失敗</ReturnMsg>\n" +
                "\t\t\t</Ret>\n" +
                "\t\t</array>\n" +
                "\t</SYS_HEAD>\n" +
                "</service>\n";
        parseReturnXml(xml);
    }

    private static void parseReturnXml(String input) throws JsonProcessingException {
        XmlMapper mapper = new XmlMapper();
        JSONObject book = mapper.readValue(input, JSONObject.class);
        String ReturnCode = jsonLoop(book, "ReturnCode");
        String ReturnMsg = jsonLoop(book, "ReturnMsg");
        System.out.println(book);
    }

    public static String jsonLoop(JSONObject object, String code) {
        Set<String> strings = object.keySet();
        for (String string : strings) {
            if (code.equals(string)) {
                return object.getString(code);
            } else {
                try {
                    JSONObject o = object.getJSONObject(string);
                    return jsonLoop((JSONObject) o, code);
                } catch (Exception e) {

                }
            }
        }
        return null;
    }

 參考

https://blog.csdn.net/qq_33721382/article/details/108228928

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章