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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!