虽然现在json已经相当普及了,但是开发过程中总会存在些向后兼容的问题,所以有时候接口需要xml返回结果又不可避免,这里说明一下如何让springBoot应用返回xml格式结果。
超级简单只需要两步:
第一步,在build.gradle配置文件中增加以下配置(如果使用maven请在对应的pom.xml配置对应信息)
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: '2.8.8'
第二步,在我们的restControler类对应方法中增加@RequestMapping(value="/getProductionDictX",produces = {"application/xml","application/json"})
publicMessage getProductionDictX(){
其中{"application/xml","application/json"}表示可以返回xml格式或者json格式
此时我们在浏览器中输入http://localhost:8082/getProductionDict.xml,即可以返回xml格式数据
输入http://localhost:8082/getProductionDict.json返回json格式数据。
此处有一个待解决问题,就是如果返回xml格式数据需要以下类似头信息
<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns="http://nm.cmc.com/CSCS/BW/BWMethod/BW00001/">
是无法得到的。
此处如果引入compilegroup:'org.codehaus.woodstox',name:'woodstox-core-asl',version:'4.4.1'包
并在对应值对象所在目录中增加package-info.java文件,在文件中增加如下信息
@XmlSchema(
namespace ="http://nm.cmc.com/CSCS/BW/BWMethod/BW00001/",
elementFormDefault = XmlNsForm.QUALIFIED)
packagecom.esop.productInfo.design.dto;
importjavax.xml.bind.annotation.XmlNsForm;
importjavax.xml.bind.annotation.XmlSchema;
在对应的值对象类中要增加@XmlRootElement注解,如下
importjavax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public classEp_prd_production_dict {
此时再访问服务地址会增加xmlns信息。结果如下
但是仍然无法解决<?xml version="1.0" encoding="UTF-8"?>这个头信息。
使用woodstox-core-asl还有一个问题,就是返回结果如果是List对象时转换成xml格式文件时会报错,所以如果返回结果是多条记录时此处不能用List对象直接返回。
参考文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html
http://www.jianshu.com/p/4477efb1accf
网友评论