項目框架使用的是Spring MVC框架,在Controller中返回的數據格式一直用的是Json,但是最近項目需求需要返回XMl格式的數據,於是藉助萬能的互聯網,找到了一些方法,一下方法爲我經驗總結。
##項目環境
- Spring 4.0.5.RELEASE
- JDK 1.7
- Eclipse
- Maven
##pom.xml添加依賴庫
<properties>
<spring.version>4.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 4 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
##創建實體類JavaBean
在com.mybatis.model中創建一個簡單的實體類,Coffee.java,添加JAXB註解(@XmlRootElement,@XmlElement),它會自動轉換成XML,JAXB已經包含在JDK1.6中了,不需要額外添加依賴庫,只需要使用註解,Spring會自動轉換成XML
package com.mybatis.model;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "coffee")
public class Coffee {
String name;
int quanlity;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getQuanlity() {
return quanlity;
}
@XmlElement
public void setQuanlity(int quanlity) {
this.quanlity = quanlity;
}
public Coffee(String name, int quanlity) {
this.name = name;
this.quanlity = quanlity;
}
public Coffee(){
}
}
JAXB Annotation說明:
@XmlType,將Java類或枚舉類型映射到XML模式類型
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或屬性的序列化。FIELD表示JAXB將自動綁定Java類中的每個非靜態的(static)、非瞬態的(由@XmlTransient標註)字段到XML。其他值還有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 綁定類中屬性和字段的排序。
@XmlJavaTypeAdapter,使用定製的適配器(即擴展抽象類XmlAdapter並覆蓋marshal()和unmarshal()方法),以序列化Java類爲XML。
@XmlElementWrapper ,對於數組或集合(即包含多個元素的成員變量),生成一個包裝該數組或集合的XML元素(稱爲包裝器)。
@XmlRootElement,將Java類或枚舉類型映射到XML元素。
@XmlElement,將Java類的一個屬性映射到與屬性同名的一個XML元素。
@XmlAttribute,將Java類的一個屬性映射到與屬性同名的一個XML屬性。
##創建Controller類
在com.controller中創建一個Controller類,XMlController.java
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.mybatis.model.Coffee;
@Controller
@RequestMapping("/coffee")
public class Xmlcontroller {
@RequestMapping("/xml")
public @ResponseBody Coffee getCoffeeinXML(@RequestParam String name){
Coffee coffee = new Coffee(name,100);
return coffee;
}
}
##測試連接
http://localhost:8080/CMP/coffee/xml.do?name=zhang
##其他方法說明
- 在spring的配置中啓用mvc:annotation-driven註解
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<mvc:annotation-driven />
<!-- 自動掃描controller包下的所有類,如果@Controller注入爲bean -->
<context:component-scan base-package="com.controller" />
</beans>
- 添加spring-oxm.jar依賴,並用以下的MarshallingView處理轉換,使用這種方法,你可以不用在方法中使用@ResponseBody註解
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean id="xmlViewer"
class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.mybatis.model.Coffee</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
項目推薦
DC3是基於Spring Cloud的開源可分佈式物聯網(IOT)平臺,用於快速開發、部署物聯設備接入項目,是一整套物聯繫統解決方案。