Java xml数据格式返回实现操作

  

前言:对于服务器后端开发,接口返回的数据格式一般要求都是json,但是也有使用xml格式

  

<强> RequestBody注解

  

对于SpringMVC,很多人会认为接口方法使用@ controller搭配@ResponseBody和@RequestMapping注解后,java对象会转换成json格式返回。

  

但实际上配合@ResponseBody注解后,接口返回的数据类型是根据HTTP请求报头中属的接受性来确定的,可以是XML或JSON者数据

  

<强>通过适当的HttpMessageConverter对java对象进行格式转换,常用的有:

  
  

ByteArrayHttpMessageConverter      

负责读取二进制格式的数据和写出二进制格式的数据,

  
  StringHttpMessageConverter

     

负责读取字符串格式的数据和写出二进制格式的数据,

  
  

ResourceHttpMessageConverter      

负责读取资源文件和写出资源文件数据;

  
  FormHttpMessageConverter

     

负责读取形式提交的数据,

  
  

MappingJacksonHttpMessageConverter      

负责读取和写入json格式的数据,

  
  

SouceHttpMessageConverter      

负责读取和写入xml中javax.xml.transform.Source定义的数据,

  
  

Jaxb2RootElementHttpMessageConverter      

负责读取和写入xml标签格式的数据,

  
  

AtomFeedHttpMessageConverter      

负责读取和写入原子格式的数据,

  
  

RssChannelHttpMessageConverter      

负责读取和写入RSS格式的数据

  

具体使用哪个怎么判断这里就不细讲了,我们关心的是Jaxb2RootElementHttpMessageConverter这个方法,后面会讲为啥会提

  

<强> java对象与xml之间互相转换

  

使用Java自带注解的方式实现(@XmlRootElement、@XmlAccessorType @XmlElement, @XmlAttribute),具体使用方法网上有很多

  

这里直接代码举例

        进口javax.xml.bind.annotation.XmlElement;   进口javax.xml.bind.annotation.XmlRootElement;   进口javax.xml.bind.annotation.XmlType;      @XmlRootElement (name="城市")   @XmlType (propOrder={“名称”、“省”})   城市公共类{   私人字符串名称;   私人的字符串;      公共城市(){   }      公共城市(字符串名称字符串省){   this.name=名称;   这一点。?省;   }      公共字符串getName () {   返回名称;   }      @XmlElement   公共空间setName(字符串名称){   this.name=名称;   }      公共字符串getProvince () {   返回省;   }      @XmlElement   公共空间setProvince(字符串省){   这一点。?省;   }   }   之前      

<强>控制器

        进口org.springframework.stereotype.Controller;   进口org.springframework.web.bind.annotation.RequestMapping;   进口org.springframework.web.bind.annotation.ResponseBody;      @ controller   公开课IndexController {      @RequestMapping=(路径“/?   @ResponseBody   公共城市getXml () {   城市城市=new(“太原”,“山西”);   返回城市;   }   }   之前      

请求http://localhost: 8080/返回结果如下

  

癑ava

  

是不很容易就实现接口返回xml格式

  

使用& lt; ! [CDATA[]]在

  

对象属性中有可能存在计算逻辑“& lt;”或“在”,而在xml文件中这两个符号是不合法的,会转换为,lt和和gt,这样数据就“坏”了,所以& lt; ! [CDATA[]]祝辞的加入是非常有必要的!

  

<强>一般实现:使用XmlAdapter定义一个CDataAdapter类,网上也有很多代码

  

大概的实现如下

        公共类CDataAdapter XmlAdapter<延伸;字符串,String>{      @Override   公共字符串数据(字符串v){抛出异常//我们这里没有xml转java对象,这里就不具体实现了   返回v;   }      @Override   公共字符串(字符串v)元帅抛出异常{   返回新StringBuilder (“& lt; ! [CDATA [”) .append (v) .append(“]]祝辞”).toString ();   }      }

Java xml数据格式返回实现操作