SpringBoot javaBean轉xml


添加依賴

<dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.13.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.13.1</version>
        </dependency>

xml注解介紹

  • @JacksonXmlRootElement
    • namespace屬性:用於指定XML根元素命名空間的名稱。
    • localname屬性:用於指定XML根元素節點標簽的名稱。
  • @JacksonXmlProperty
    • namespace和localname屬性用於指定XML命名空間的名稱,isAttribute指定該屬 性作為XML的屬性()還是作為子標簽().
  • @JacksonXmlText注解將屬性直接作為未被標簽包裹的普通文本表現。
  • @JacksonXmlCData將屬性包裹在CDATA標簽中。
  • 集合元素的映射
    • @JacksonXmlElementWrapper可以將列表數據轉為XML節點。
    • useWrapping屬性設置是否設置外圍標簽名,默認true

封裝方法

    /**
     * javaBean轉xml
     *
     * @param javaBean javaBean對象
     * @return
     */
    public static String javaBean2Xml(Object javaBean) {
        try {
            XmlMapper xmlMapper = new XmlMapper();
            xmlMapper.setDefaultUseWrapper(false);
            //字段為null,自動忽略,不再序列化
            xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            //XML標簽名:使用駱駝命名的屬性名,
            xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
            //設置轉換模式
            xmlMapper.enable(MapperFeature.USE_STD_BEAN_NAMING);
            return xmlMapper.writeValueAsString(javaBean);
        } catch (Exception e) {
            log.error("對象轉xml失敗,{}", javaBean);
            return null;
        }
    }

案例一

  設置根標簽@JacksonXmlRootElement

@Data
@JacksonXmlRootElement(localName = "Response")
public class YuanTongLogisticsResponseVo {
    @ApiModelProperty(value = "物流公司ID(必填)")
    @JacksonXmlProperty
    private String logisticProviderID;

    @ApiModelProperty(value = "物流號(必填)")
    @JacksonXmlProperty
    private String txLogisticID;

    @ApiModelProperty(value = "成功失敗標識 true-成功;false-失敗(必填)")
    @JacksonXmlProperty
    private boolean success;

    @ApiModelProperty(value = "失敗原因(可空)")
    @JacksonXmlProperty
    private String reason;
}

測試一

    public static void main(String[] args) {
        YuanTongLogisticsResponseVo vo = new YuanTongLogisticsResponseVo();
        vo.setLogisticProviderID("AAA");
        vo.setTxLogisticID("BBBB");
        vo.setSuccess(true);
        vo.setReason("CCC");
        System.err.println(CommonUtil.javaBean2Xml(vo));
    }
<Response>
    <LogisticProviderID>AAA</LogisticProviderID>
    <TxLogisticID>BBBB</TxLogisticID>
    <Success>true</Success>
    <Reason>CCC</Reason>
</Response>

案例二

  @JacksonXmlProperty 如果不設置localName默認都是首字母大寫

@Data
@JacksonXmlRootElement(localName = "Response")
public class YuanTongLogisticsResponseVo {
    @ApiModelProperty(value = "物流公司ID(必填)")
    @JacksonXmlProperty(localName = "logisticProviderID", isAttribute = true)
    private String logisticProviderID;

    @ApiModelProperty(value = "物流號(必填)")
    @JacksonXmlProperty(localName = "txLogisticID")
    private String txLogisticID;

    @ApiModelProperty(value = "成功失敗標識 true-成功;false-失敗(必填)")
    @JacksonXmlProperty(localName = "success")
    private boolean success;

    @ApiModelProperty(value = "失敗原因(可空)")
    @JacksonXmlProperty(localName = "reason")
    private String reason;
}

測試二

    public static void main(String[] args) {
        YuanTongLogisticsResponseVo vo = new YuanTongLogisticsResponseVo();
        vo.setLogisticProviderID("AAA");
        vo.setTxLogisticID("BBBB");
        vo.setSuccess(true);
        vo.setReason("CCC");
        System.err.println(CommonUtil.javaBean2Xml(vo));
    }
<Response logisticProviderID="AAA">
    <txLogisticID>BBBB</txLogisticID>
    <success>true</success>
    <reason>CCC</reason>
</Response>

案例三

  @JacksonXmlElementWrapper設置集合外圍標簽名

@Data
@JacksonXmlRootElement(localName = "Response")
public class YuanTongLogisticsResponseVo {
    @ApiModelProperty(value = "物流公司ID(必填)")
    @JacksonXmlProperty(localName = "logisticProviderID")
    private String logisticProviderID;

    @ApiModelProperty(value = "物流號(必填)")
    @JacksonXmlProperty(localName = "txLogisticID")
    private String txLogisticID;

    @ApiModelProperty(value = "成功失敗標識 true-成功;false-失敗(必填)")
    @JacksonXmlProperty(localName = "success")
    private boolean success;

    @ApiModelProperty(value = "失敗原因(可空)")
    @JacksonXmlProperty(localName = "reason")
    private String reason;

    @JacksonXmlElementWrapper(localName = "res")
    @JacksonXmlProperty(localName = "other")
    private List<YuanTongLogisticsResponseTestVo> res;
}
@Data
public class YuanTongLogisticsResponseTestVo {
    @ApiModelProperty(value = "id(必填)")
    @JacksonXmlProperty(localName = "id")
    private String id;

    @ApiModelProperty(value = "name(必填)")
    @JacksonXmlProperty(localName = "name")
    private String name;
}

測試類

        YuanTongLogisticsResponseVo vo = new YuanTongLogisticsResponseVo();
        vo.setLogisticProviderID("AAA");
        vo.setTxLogisticID("BBBB");
        vo.setSuccess(true);
        vo.setReason("CCC");
        List<YuanTongLogisticsResponseTestVo> voList = new ArrayList<>();
        YuanTongLogisticsResponseTestVo vo1 = new YuanTongLogisticsResponseTestVo();
        vo1.setId("1");
        vo1.setName("test01");
        YuanTongLogisticsResponseTestVo vo2 = new YuanTongLogisticsResponseTestVo();
        vo2.setId("2");
        vo2.setName("test02");
        voList.add(vo1);
        voList.add(vo2);
        vo.setRes(voList);
        System.err.println(CommonUtil.javaBean2Xml(vo));
<Response>
    <logisticProviderID>AAA</logisticProviderID>
    <txLogisticID>BBBB</txLogisticID>
    <success>true</success>
    <reason>CCC</reason>
    <res>
        <other>
            <id>1</id>
            <name>test01</name>
        </other>
        <other>
            <id>2</id>
            <name>test02</name>
        </other>
    </res>
</Response>

  不使用@JacksonXmlElementWrapper設置集合外圍標簽名

@Data
@JacksonXmlRootElement(localName = "Response")
public class YuanTongLogisticsResponseVo {
    @ApiModelProperty(value = "物流公司ID(必填)")
    @JacksonXmlProperty(localName = "logisticProviderID")
    private String logisticProviderID;

    @ApiModelProperty(value = "物流號(必填)")
    @JacksonXmlProperty(localName = "txLogisticID")
    private String txLogisticID;

    @ApiModelProperty(value = "成功失敗標識 true-成功;false-失敗(必填)")
    @JacksonXmlProperty(localName = "success")
    private boolean success;

    @ApiModelProperty(value = "失敗原因(可空)")
    @JacksonXmlProperty(localName = "reason")
    private String reason;

    @JacksonXmlProperty(localName = "other")
    private List<YuanTongLogisticsResponseTestVo> res;
}
@Data
public class YuanTongLogisticsResponseTestVo {
    @ApiModelProperty(value = "id(必填)")
    @JacksonXmlProperty(localName = "id")
    private String id;

    @ApiModelProperty(value = "name(必填)")
    @JacksonXmlProperty(localName = "name")
    private String name;
}

測試類

    public static void main(String[] args) {
        YuanTongLogisticsResponseVo vo = new YuanTongLogisticsResponseVo();
        vo.setLogisticProviderID("AAA");
        vo.setTxLogisticID("BBBB");
        vo.setSuccess(true);
        vo.setReason("CCC");
        List<YuanTongLogisticsResponseTestVo> voList = new ArrayList<>();
        YuanTongLogisticsResponseTestVo vo1 = new YuanTongLogisticsResponseTestVo();
        vo1.setId("1");
        vo1.setName("test01");
        YuanTongLogisticsResponseTestVo vo2 = new YuanTongLogisticsResponseTestVo();
        vo2.setId("2");
        vo2.setName("test02");
        voList.add(vo1);
        voList.add(vo2);
        vo.setRes(voList);
        System.err.println(CommonUtil.javaBean2Xml(vo));
    }
<Response>
    <logisticProviderID>AAA</logisticProviderID>
    <txLogisticID>BBBB</txLogisticID>
    <success>true</success>
    <reason>CCC</reason>
    <other>
        <id>1</id>
        <name>test01</name>
    </other>
    <other>
        <id>2</id>
        <name>test02</name>
    </other>
</Response>

案例四

   @JacksonXmlText注解將屬性直接作為未被標簽包裹的普通文本表現

@Data
@JacksonXmlRootElement(localName = "Response")
public class YuanTongLogisticsResponseVo {
    @ApiModelProperty(value = "物流公司ID(必填)")
    @JacksonXmlText
    private String logisticProviderID;

    @ApiModelProperty(value = "物流號(必填)")
    @JacksonXmlProperty(localName = "txLogisticID")
    private String txLogisticID;

    @ApiModelProperty(value = "成功失敗標識 true-成功;false-失敗(必填)")
    @JacksonXmlProperty(localName = "success")
    private boolean success;

    @ApiModelProperty(value = "失敗原因(可空)")
    @JacksonXmlProperty(localName = "reason")
    private String reason;
}

測試四

    public static void main(String[] args) {
        YuanTongLogisticsResponseVo vo = new YuanTongLogisticsResponseVo();
        vo.setLogisticProviderID("AAA");
        vo.setTxLogisticID("BBBB");
        vo.setSuccess(true);
        vo.setReason("CCC");
        System.err.println(CommonUtil.javaBean2Xml(vo));
    }
<Response>AAA
    <txLogisticID>BBBB</txLogisticID>
    <success>true</success>
    <reason>CCC</reason>
</Response>

案例五

  @JacksonXmlCData將屬性包裹在CDATA標簽中。

@Data
@JacksonXmlRootElement(localName = "Response")
public class YuanTongLogisticsResponseVo {
    @ApiModelProperty(value = "物流公司ID(必填)")
    @JacksonXmlCData
    private String logisticProviderID;

    @ApiModelProperty(value = "物流號(必填)")
    @JacksonXmlProperty(localName = "txLogisticID")
    private String txLogisticID;

    @ApiModelProperty(value = "成功失敗標識 true-成功;false-失敗(必填)")
    @JacksonXmlProperty(localName = "success")
    private boolean success;

    @ApiModelProperty(value = "失敗原因(可空)")
    @JacksonXmlProperty(localName = "reason")
    private String reason;
}

測試四

    public static void main(String[] args) {
        YuanTongLogisticsResponseVo vo = new YuanTongLogisticsResponseVo();
        vo.setLogisticProviderID("AAA");
        vo.setTxLogisticID("BBBB");
        vo.setSuccess(true);
        vo.setReason("CCC");
        System.err.println(CommonUtil.javaBean2Xml(vo));
    }
<Response>
    <LogisticProviderID><![CDATA[AAA]]></LogisticProviderID>
    <txLogisticID>BBBB</txLogisticID>
    <success>true</success>
    <reason>CCC</reason>
</Response>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM