【SpringMVC學習10】SpringMVC對RESTfull的支持

RESTful架構,就是目前流行的一種互聯網軟件架構。它結構清晰、符合標準、易於理解、擴展方便,所以正得到越來越多網站的採用。RESTful架構對url進行規範,寫RESTful格式的url是什麼樣子的呢?我們一般請求的url是類似這樣子的: 
http://...../xxx.action?id=001&type=aaa 
  而REST的url風格是什麼樣子呢?一般它類似於: 
http://..../xxx/001 
  所以REST有個很明顯的特點:使url變得簡潔,將參數通過url傳到服務端。springmvc也是支持這種REST風格的url的,我們定義一個controller來測試一下:

//查詢商品信息,輸出json,使用RESTful
@RequestMapping("/itemsView/{id}")
public @ResponseBody ItemsCustom itemsView(@PathVariable("id") Integer id) throws Exception {
    ItemsCustom itemsCustom = itemsService.findItemsById(id);
    return itemsCustom;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  @ResponseBody是用來將itemsCustom轉成json的註解,而@PathVariable註解則是跟REST有關了,@RequestMapping(value=”/ itemsView/{id}”)中的{id}表示一個佔位符,那麼這裏面傳過來的值會傳到被@PathVariable標記的形參上,如果形參和佔位符中的變量一樣的話,可以不用再註解中指定,否則註解中要指定這個佔位符中的變量(即id)。這樣的話,參數就可以通過url傳到形參中來了。 
  但是這樣還不行,還要在前端控制器中針對REST進行配置,如下:

<!-- 配置springmvc的前端控制器DispatcherServlet,REST配置 -->
<servlet>
    <servlet-name>springmvc_rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>springmvc_rest</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

  攔截的是所有的url(/),這個配置跟之前配置好的前端控制器是沒有衝突的,可以並存。經過這樣配置後,就可以在瀏覽器中輸入http://localhost:8080/SpringMVC_Study/itemsView/1來測試返回到瀏覽器的數據了,可以看到返回一串json數據。 
  但是有個問題,使用上面的配置後會攔截所有的url,那麼對靜態資源也會攔截,所以DispatcherServlet也會解析靜態資源,但是這樣的話就會出錯,所以我們要設置一下不讓它解析靜態資源。如:

<!-- 靜態資源解析,包括js,css,img... -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/img/" mapping="/img/**"></mvc:resources>
  • 1
  • 2
  • 3

  如果還有其他靜態資源的話,也要設置一下,這樣就不會去解析靜態資源了,訪問靜態資源的時候就直接訪問即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章