springboot使用jackson实现pojo和xml互相转换

本是古典 何须时尚 2022-10-15 14:00 1344阅读 0赞

springboot使用jackson实现pojo和xml互相转换

  • 一、引入maven包
  • 二、创建pojo
    • 1.Java对象转XML
    • 2.XML转Java对象

一、引入maven包

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.dataformat</groupId>
  3. <artifactId>jackson-dataformat-xml</artifactId>
  4. </dependency>

二、创建pojo

使用lombok快速创建

xml转换核心注解
@JacksonXmlElementWrapper:可以将列表数据转为XML节点。;
@JacksonXmlRootElement:指定生成xml根标签的名字;
@JacksonXmlProperty:指定包装标签名,或者指定标签内部属性名;
@JacksonXmlText:指定当前这个值,没有xml标签包裹。

  1. package com.erfou.entity;
  2. import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
  3. import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
  4. import lombok.AllArgsConstructor;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. @Data
  8. @AllArgsConstructor
  9. @NoArgsConstructor
  10. @JacksonXmlRootElement(localName = "xml")
  11. public class PaylinxCallBack {
  12. @JacksonXmlProperty(localName = "bank_type")
  13. private String bank_type;
  14. @JacksonXmlProperty(localName = "cash_fee")
  15. private String cash_fee;
  16. @JacksonXmlProperty(localName = "cash_fee_type")
  17. private String cash_fee_type;
  18. @JacksonXmlProperty(localName = "fee_type")
  19. private String fee_type;
  20. @JacksonXmlProperty(localName = "result_code")
  21. private String result_code;
  22. @JacksonXmlProperty(localName = "return_code")
  23. private String return_code;
  24. @JacksonXmlProperty(localName = "time_end")
  25. private String time_end;
  26. @JacksonXmlProperty(localName = "total_fee")
  27. private String total_fee;
  28. @JacksonXmlProperty(localName = "transaction_id")
  29. private String transaction_id;
  30. @JacksonXmlProperty(localName = "mch_id")
  31. private String mch_id;
  32. @JacksonXmlProperty(localName = "nonce_str")
  33. private String nonce_str;
  34. @JacksonXmlProperty(localName = "out_trade_no")
  35. private String out_trade_no;
  36. @JacksonXmlProperty(localName = "platform")
  37. private String platform;
  38. @JacksonXmlProperty(localName = "sign")
  39. private String sign;
  40. }

1.Java对象转XML

使用XmlMapper 的writeValueAsString方法进行转换

  1. @GetMapping("/toxml")
  2. public void toXml(){
  3. PaylinxCallBack paylinxCallBack = new PaylinxCallBack();
  4. paylinxCallBack.setSign("963852741");
  5. XmlMapper xmlMapper = new XmlMapper();
  6. try {
  7. String xml = xmlMapper.writeValueAsString(paylinxCallBack);
  8. System.out.println(xml);
  9. } catch (JsonProcessingException e) {
  10. e.printStackTrace();
  11. }
  12. }

转换结果

  1. <xml>
  2. <bank_type/>
  3. <cash_fee/>
  4. <cash_fee_type/>
  5. <fee_type/>
  6. <result_code/
  7. ><return_code/>
  8. <time_end/>
  9. <total_fee/>
  10. <transaction_id/>
  11. <mch_id/>
  12. <nonce_str/>
  13. <out_trade_no/>
  14. <platform/>
  15. <sign>963852741</sign>
  16. </xml>

2.XML转Java对象

使用xmlMapper.readValue进行转化

  1. @GetMapping("/topojo")
  2. public void toPojo() throws IOException {
  3. String xml="<?xml version=\"1.0\"?>\n" +
  4. "<xml>\n" +
  5. " <bank_type><![CDATA[CFT]]></bank_type>\n" +
  6. " <cash_fee><![CDATA[3198]]></cash_fee>\n" +
  7. " <cash_fee_type><![CDATA[CNY]]></cash_fee_type>\n" +
  8. " <fee_type><![CDATA[AUD]]></fee_type>\n" +
  9. " <result_code><![CDATA[SUCCESS]]></result_code>\n" +
  10. " <return_code><![CDATA[SUCCESS]]></return_code>\n" +
  11. " <time_end><![CDATA[20190218175517]]></time_end>\n" +
  12. " <total_fee><![CDATA[659]]></total_fee>\n" +
  13. " <transaction_id><![CDATA[4200000268201902183412918770]]></transaction_id>\n" +
  14. " <mch_id><![CDATA[1234567]]></mch_id>\n" +
  15. " <nonce_str><![CDATA[6saqecbgail2c08kgkgd1mrdfge8i6bb]]></nonce_str>\n" +
  16. " <out_trade_no><![CDATA[A1550523295]]></out_trade_no>\n" +
  17. " <platform><![CDATA[wechat]]></platform>\n" +
  18. " <sign><![CDATA[9E86F28A2C6536509A133DC085AD0203]]></sign>\n" +
  19. "</xml>";
  20. XmlMapper xmlMapper = new XmlMapper();
  21. xmlMapper.setDefaultUseWrapper(false);
  22. xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  23. PaylinxCallBack paylinxCallBack=xmlMapper.readValue(xml,PaylinxCallBack.class);
  24. System.out.println(paylinxCallBack.toString());
  25. }

结果

  1. PaylinxCallBack(bank_type=CFT, cash_fee=3198, cash_fee_type=CNY, fee_type=AUD, result_code=SUCCESS, return_code=SUCCESS, time_end=20190218175517, total_fee=659, transaction_id=4200000268201902183412918770, mch_id=1234567, nonce_str=6saqecbgail2c08kgkgd1mrdfge8i6bb, out_trade_no=A1550523295, platform=wechat, sign=9E86F28A2C6536509A133DC085AD0203)

发表评论

表情:
评论列表 (有 0 条评论,1344人围观)

还没有评论,来说两句吧...

相关阅读