前言:對于服務器后端開發(fā),接口返回的數(shù)據(jù)格式一般要求都是json,但是也有使用xml格式
RequestBody注解
對于SpringMVC,很多人會認為接口方法使用@Controller搭配@ResponseBody和@RequestMapping注解后,java對象會轉(zhuǎn)換成json格式返回。
但實際上配合@ResponseBody注解后,接口返回的數(shù)據(jù)類型是根據(jù)HTTP Request Header中的Accept屬性來確定的,可以是XML或者JSON數(shù)據(jù)
通過適當?shù)腍ttpMessageConverter對java對象進行格式轉(zhuǎn)換,常用的有:
ByteArrayHttpMessageConverter
負責讀取二進制格式的數(shù)據(jù)和寫出二進制格式的數(shù)據(jù);
StringHttpMessageConverter
負責讀取字符串格式的數(shù)據(jù)和寫出二進制格式的數(shù)據(jù);
ResourceHttpMessageConverter
負責讀取資源文件和寫出資源文件數(shù)據(jù);
FormHttpMessageConverter
負責讀取form提交的數(shù)據(jù);
MappingJacksonHttpMessageConverter
負責讀取和寫入json格式的數(shù)據(jù);
SouceHttpMessageConverter
負責讀取和寫入 xml 中javax.xml.transform.Source定義的數(shù)據(jù);
Jaxb2RootElementHttpMessageConverter
負責讀取和寫入xml 標簽格式的數(shù)據(jù);
AtomFeedHttpMessageConverter
負責讀取和寫入Atom格式的數(shù)據(jù);
RssChannelHttpMessageConverter
負責讀取和寫入RSS格式的數(shù)據(jù)
具體使用哪個怎么判斷這里就不細講了,我們關心的是Jaxb2RootElementHttpMessageConverter這個方法,后面會講為啥會提
java對象與xml之間互相轉(zhuǎn)換
使用Java自帶注解的方式實現(xiàn)(@XmlRootElement,@XmlAccessorType,@XmlElement,@XmlAttribute),具體使用方法網(wǎng)上有很多
這里直接代碼舉例
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name = "city") @XmlType(propOrder = { "name","province"}) public class City { private String name; private String province; public City() { } public City(String name, String province) { this.name = name; this.province = province; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public String getProvince() { return province; } @XmlElement public void setProvince(String province) { this.province = province; } }