1.問題 : 因為業務需要,需要發送xml格式的數據,使用spring mvc 自己解析,就不用費心去自己搞這些東西.
2.解決:
新建一個實體類,直接在實體類中添加注解即可,如下:
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class XMlTestBean { @XmlElement @XmlCDATA private String username; @XmlElement private String password; @XmlElement private String name; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "XMlTestBean [username=" + username + ", password=" + password + ", name=" + name + "]"; } }
類上方添加:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
字段名添加:
@XmlElement
在controller類中返回即可:
@Controller @RequestMapping("test") public class TestController { @RequestMapping("xml") @ResponseBody public XMlTestBean getTestXML(){ XMlTestBean xml = new XMlTestBean(); xml.setUsername("aa"); xml.setPassword("bb"); xml.setName("cc"); return xml; } @RequestMapping("getXml") public void getXml(@RequestBody XMlTestBean xml){ System.out.println(xml); } }
結果:
<?xml version="1.0" encoding="UTF-8"?> <xMlTestBean> <username> <![CDATA[aa]]> </username> <password>bb</password> <name>cc</name> </xMlTestBean>
補充:@XmlCDATA注解的作用:可以讓返回值中添加
<![CDATA[]]>
CDATA 區段,可以不被XML解析器解析,但是需要在pom.xml添加
<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.5.0</version> </dependency>
和在實體類的包下添加jaxb.properties文件,文件內容如下:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
只是解決了問題,但是原理這些還不懂,Σ( ° △ °|||)︴,有機會再搞懂原理吧