前言:对于服务器后端开发,接口返回的数据格式一般要求都是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/返回结果如下
是不很容易就实现接口返回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数据格式返回实现操作