Spring MVC實現Restful Web Service

引言: java

之前一說到Web Service你們確定會聯想到SOAP,如今提到Web Service你們立刻聯想到RESTful,由於RESTful Web Service已經深得人心,獲得重用,相比笨重的SOAP愈來愈流行了,那麼什麼是RESTful Web ServiceREST英文全稱爲Representational State Transfer,翻譯爲中文即表徵狀態轉移,是一種軟件架構風格,REST關鍵原則爲: spring

  1. 爲全部事物定義ID json

  2. 將全部事物連接在一塊兒 網絡

  3. 使用標準方法 架構

  4. 資源多重表述 mvc

  5. 無狀態通訊 app

RESTful Web Service 是一個使用HTTP並遵循REST原則的Web服務。它從三個方面資源進行定義: spa

  1. URI,好比:http://example.com/resources/ .net

  2. Web Service接受與返回的互聯網媒體類型,好比:JSONXML等。 翻譯

  3. Web Service在該資源上所支持的一系列請求方法(好比:POSTGETPUTDELETE)。


HTTP 請求方法在RESTful Web 服務中的典型應用

資源

GET

PUT

POST

DELETE

一組資源的URI,好比http://example.com/resources/

列出 URI,以及該資源組中每一個資源的詳細信息(後者可選)。

使用給定的一組資源替換當前整組資源。

在本組資源中建立/追加一個新的資源。該操做每每返回新資源的URL

刪除整組資源。

單個資源的URI,好比http://example.com/resources/142

獲取指定的資源的詳細信息,格式能夠自選一個合適的網絡媒體類型(好比:XMLJSON等)

替換/建立指定的資源。並將其追加到相應的資源組中。

把指定的資源當作一個資源組,並在其下建立/追加一個新的元素,使其隸屬於當前資源。

刪除指定的元素。


SpringMVCRESTful Web Service的支持:

1.URIHTTP請求方法映射到JAVA處理方法,並將JAVA方法處理結果返回給HTTP請求者(對應資源定義I和III)。

@RequestMapping

這是最重要的一個註解,用於處理HTTP請求地址映射,可用於類或方法上,用於類上時表示類中的全部響應請求的方法都是以該地址做爲父路徑,在Spring中,通常一個Controller類處理一種資源,因此每一個Controller類都會加@RequestMapping註解。

經常使用屬性:

value指定請求的地址

method指定請求的method類型, GETPOSTPUTDELETE

params指定request中必須包含某些參數值是,才讓該方法處理

1
2
3
4
5
6
7
8
9
10
11
@RequestMapping(value = "/contact")
public class ContactController {
    final Logger logger = LoggerFactory.getLogger(ContactController.class);
    @Autowired
    private ContactService contactService;
    @RequestMapping(value = "/listdata", method = RequestMethod.GET)
    @ResponseBody
    public Contacts listData() {
        return new Contacts(contactService.findAll());
    }

@PathVariable

映射URL路徑裏面的參數

1
2
3
4
5
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @ResponseBody
    public Contact findContactById(@PathVariable Long id) {
        return contactService.findById(id);
    }


2.將接收的數據(如JSON格式數據)轉換爲JAVA對象和將JAVA對象轉換爲請求格式(如XML)的數據(對應資源定義II

@RequestBody

用於讀取Request請求的body數據,使用Bean配置中的 HttpMessageConverter 將數據轉換爲JAVA對象,再把對象綁定到 controller中方法的參數上。

1
2
3
4
5
6
7
8
@RequestMapping(value = "/", method = RequestMethod.POST)
    @ResponseBody
    public Contact create(@RequestBody Contact contact) {
        logger.info("Creating contact: " + contact);
        contactService.save(contact);
        logger.info("Contact created successfully with info: " + contact);
        return contact;
    }

@ResponseBody

用於將Controller中方法返回的對象,使用Bean配置中的 HttpMessageConverter 轉換爲指定格式數據,再寫入到Response對象的body數據區。

1
2
3
4
5
@RequestMapping(value = "/listdata", method = RequestMethod.GET)
    @ResponseBody
    public Contacts listData() {
        return new Contacts(contactService.findAll());
    }

HttpMessageConverter配置示例:

1
2
3
4
5
6
7
8
9
10
<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            <bean
                class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
                <property name="marshaller" ref="castorMarshaller" />
                <property name="unmarshaller" ref="castorMarshaller" />
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

默認狀況下Spring已經啓用了不少HttpMessageConverter,只要將他們的實如今類路徑下便可,無需再配置。

  • ByteArrayHttpMessageConverter – converts byte arrays

  • StringHttpMessageConverter – converts Strings

  • ResourceHttpMessageConverter – converts org.springframework.core.io.Resource for any type of octet stream

  • SourceHttpMessageConverter – converts javax.xml.transform.Source

  • FormHttpMessageConverter – converts form data to/from a MultiValueMap<String, String>.

  • Jaxb2RootElementHttpMessageConverter – converts Java objects to/from XML (added only if JAXB2 is present on the classpath)

  • MappingJackson2HttpMessageConverter – converts JSON (added only if Jackson 2 is present on the classpath)

  • MappingJacksonHttpMessageConverter – converts JSON (added only if Jackson is present on the classpath)

  • AtomFeedHttpMessageConverter – converts Atom feeds (added only if Rome is present on the classpath)

  • RssChannelHttpMessageConverter – converts RSS feeds (added only if Rome is present on the classpath)


Spring作得太貼心了,因此開發者簡單配置就搞定RESTful WebService功能,而後就可專一於業務邏輯實現上。

相關文章
相關標籤/搜索