最近,想在本身的小項目中搭建一個Restful風格的服務接口api,項目用的spring mvc 3,據說spring mvc自己就能十分方便的支持restful的實現,因而查詢了下資料,果真很是強大。java
在一次偶然的#牆#外#(你懂的)狀態下瀏覽到了一個老外的博客,舉了幾個入門例子十分經典,原文是E文+被牆狀態,以爲有必要扒過來收藏學習下。web
在本示例中,咱們將向您展現如何將對象轉換成xml格式並經過spring mvc框架返回給用戶。spring
技術及環境:json
- Spring 3.0.5.RELEASE
- JDK 1.6
- Eclipse 3.6
- Maven 3
一、添加項目依賴
不須要更多,你只要添加spring mvc的依賴便可:
- <properties>
- <spring.version>3.0.5.RELEASE</spring.version>
- </properties>
- <dependencies>
- <!-- Spring 3 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
一個簡單的JavaBean,添加了JAXB 註解,稍後將會被轉換成xml。api
JAXB已經包含在JDK1.6中,你不須要添加額外的依賴庫,只須要使用註解,spring會自動將其轉換爲xml格式。spring-mvc
- 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() {
- }
- }
三、Controller
添加@ResponseBody註解到你的方法返回值,在spring文檔中沒有太多的細節,它會自動處理轉換。restful
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
- import com.mkyong.common.model.Coffee;
- @Controller
- @RequestMapping("/coffee")
- public class XMLController {
- @RequestMapping(value="{name}", method = RequestMethod.GET)
- public @ResponseBody Coffee getCoffeeInXML(@PathVariable String name) {
- Coffee coffee = new Coffee(name, 100);
- return coffee;
- }
- }
四、mvc:annotation-driven
在你的spring配置文件中,啓用mvc:annotation-driven註解。mvc
- <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-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
- <context:component-scan base-package="com.mkyong.common.controller" />
- <mvc:annotation-driven />
- </beans>
或者,你也能夠添加spring-oxm.jar依賴,並用如下的MarshallingView處理轉換,使用這種方法,你能夠不用在方法中使用@ResponseBody註解。app
- <beans ...>
- <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.mkyong.common.model.Coffee</value>
- </list>
- </property>
- </bean>
- </constructor-arg>
- </bean>
- </beans>
五、示例結果
訪問URL:http://localhost:8080/SpringMVC/rest/coffee/arabica框架
![spring-mvc-xml-demo spring-mvc-xml-demo](http://static.javashuo.com/static/loading.gif)
原文連接:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/