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>
posted @   陈彦斌  阅读(2022)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示