Spring REST 入門教程


一、簡介

    近幾年,以信息為中心的表述行狀態轉移(Representational State Transfer, REST)已成為替換傳統SOAP Web服務端流行方案。Spring對REST的支持是構建在Spring MVC之上的,所以需要先了解Spring MVC的知識。

二、構建Spring REST步驟

    1、配置前端控制器

復制代碼
復制代碼
1     <servlet>
2         <servlet-name>dispatcher</servlet-name>
3         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
4         <load-on-startup>1</load-on-startup>
5     </servlet>
6     <servlet-mapping>
7         <servlet-name>dispatcher</servlet-name>
8         <url-pattern>/</url-pattern>
9     </servlet-mapping>
復制代碼
復制代碼

    2、配置組件掃描

    <context:component-scan base-package="com.cnblogs.javalouvre.mvc" />

    掃描到有@RestController、@Controller、@Compoment、@RestController、@Repository等注解的類,則把這些類注冊為Bean。

    3、配置注解映射支持

    <mvc:annotation-driven />

    4、請求消息處理

復制代碼
復制代碼
 1     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
 2         <property name="messageConverters">
 3             <list>
 4                 <ref bean="mappingJackson2HttpMessageConverter"/>
 5                 <ref bean="marshallingHttpMessageConverter"/>
 6             </list>
 7         </property>
 8     </bean>
 9 
10     <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
11         <property name="supportedMediaTypes" value="application/json" />
12     </bean>
13 
14     <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
15         <property name="classesToBeBound">
16             <list>
17                 <value>com.cnblogs.javalouvre.model.Result</value>
18             </list>
19         </property>
20     </bean>
21     <bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
22         <property name="marshaller" ref="jaxb2Marshaller"/>
23         <property name="supportedMediaTypes" value="application/xml" />
24     </bean>
復制代碼
復制代碼

    5、定義控制器

復制代碼
復制代碼
 1 package com.cnblogs.javalouvre.mvc;
 2 
 3 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 4 import static org.springframework.http.MediaType.APPLICATION_XML_VALUE;
 5 import static org.springframework.web.bind.annotation.RequestMethod.GET;
 6 
 7 import org.springframework.web.bind.annotation.PathVariable;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9 import org.springframework.web.bind.annotation.ResponseBody;
10 import org.springframework.web.bind.annotation.RestController;
11 
12 import com.cnblogs.javalouvre.model.Account;
13 import com.cnblogs.javalouvre.model.Result;
14 
15 @RestController
16 @RequestMapping(value = "/account")
17 public class AccountController {
18     
19     @ResponseBody
20     @RequestMapping(value = "/{id}", method = GET, produces = { APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE })
21     public Result getAccount(@PathVariable(value = "id") Integer id) {
22         return new Result("1", "成功", new Account("211111111111111111", "啦啦啦。。。"));
23     }
24 }
復制代碼
復制代碼

    6、消息封裝POJO

復制代碼
復制代碼
 1 package com.cnblogs.javalouvre.model;
 2 
 3 import javax.xml.bind.annotation.XmlAccessType;
 4 import javax.xml.bind.annotation.XmlAccessorType;
 5 import javax.xml.bind.annotation.XmlElement;
 6 import javax.xml.bind.annotation.XmlRootElement;
 7 
 8 @XmlRootElement
 9 @XmlAccessorType(XmlAccessType.FIELD)
10 public class Result implements java.io.Serializable {
11 
12     private static final long serialVersionUID = -6254553465205204221L;
13     @XmlElement
14     private String code;
15     @XmlElement
16     private String message;
17     private Account account;
18 
19     public Result() {
20     }
21 
22     public Result(String code, String message, Account account) {
23         this.code = code;
24         this.message = message;
25         this.account = account;
26     }
27 
28     // GETTER/SETTER
29 
30 }
復制代碼
復制代碼
復制代碼
復制代碼
 1 package com.cnblogs.javalouvre.model;
 2 
 3 import java.io.Serializable;
 4 
 5 import javax.xml.bind.annotation.XmlAccessType;
 6 import javax.xml.bind.annotation.XmlAccessorType;
 7 import javax.xml.bind.annotation.XmlElement;
 8 import javax.xml.bind.annotation.XmlRootElement;
 9 
10 @XmlRootElement
11 @XmlAccessorType(XmlAccessType.FIELD)
12 public class Account implements Serializable {
13 
14     private static final long serialVersionUID = -4282266548648755231L;
15 
16     @XmlElement
17     private String oid;
18 
19     @XmlElement
20     private String name;
21 
22     public Account() {
23     }
24 
25     public Account(String oid, String name) {
26         this.oid = oid;
27         this.name = name;
28     }
29 
30     // GETTER/SETTER
31 
32 }
復制代碼
復制代碼

    7、測試

    使用  Firefox RESTClient 測試,設置Accept為application/json,則返回JSON格式數據,設置Accept為application/xml,則返回XML格式數據,如下:

1 {"code":"1","message":"成功","account":{"oid":"211111111111111111","name":"啦啦啦。。。"}}
1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><result><code>1</code><message>成功</message><account><oid>211111111111111111</oid><name>啦啦啦。。。</name></account></result>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM