1. 程式人生 > >Spring框架之基於Restful風格實現的SpringMVC

Spring框架之基於Restful風格實現的SpringMVC

如果說現在你要做一個系統,假設說有一個模組屬於公告管理,那麼我們可能安排路徑的時候會這樣安排NewsAction路徑: 
· 增加新聞:/pages/back/admin/news/add.action; 
· 新聞列表:/pages/back/admin/news/list.action 
隨著技術的發展,有一種新型的架構設計思想:Restful風格,也就是說利用一個簡單的路徑,而後根據HTTP提交模式不同。那麼可以完成不同的功能,也就是說: 
· 看一個新聞內容:/news/1,GET; 
· 刪除新聞:/news/1,DELETE。

基礎整合配置 
如果現在希望Spring MVC執行的時候可以以Restful的風格進行執行,那麼首先需要新增一些依賴程式庫,修改pom.xml檔案,追加如下的配置:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.3</version>
<version>2.8.3</version>
  • 1
  • 2
  • 3
  • 4
  • 5

在pom.xml裡配置


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId
>
<artifactId>jackson-core</artifactId> <version>2.8.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId
>
<version>2.8.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.3</version> </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

隨後還需要修改web.xml檔案,因為如果要想實現Restful風格的開發,那麼對於所有的Action請求路徑就必須做出修改

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  • 1
  • 2
  • 3
  • 4

建立一個MemberAction程式類,定義有如下的一個程式操作:

public class MemberAction {
// 定義該方法的訪問路徑,而後表示該方法返回的資料型別為普通的文字型別(MIME)
    @RequestMapping(value="/info",produces="text/plain;charset=UTF-8")
    public @ResponseBody String info() { // 該方法的返回值即迴應的主題訊息
    return "www.mldnjava.cn" ;
    }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在未使用restful操作的時候要想實現這樣的輸出則必須利用response物件完成處理,但是如果使用了restful之後整個的操作利用註解可以直接將方法的返回內容變為一個具體的文字資料出現。

    @RequestMapping(value = "/echo/{msgParam}", produces = "text/plain;charset=UTF-8")
    public @ResponseBody String echo(@PathVariable("msgParam") String msg) {
        return "ECHO : " + msg;
    }
  • 1
  • 2
  • 3
  • 4

也就是說整個在Restful處理過程之中,這些路徑的控制會更加的全面,可以表述的含義也更加的豐富。

Spring MVC本身支援restful風格操作,但是在整個的Restful風格里面大部分的情況都是與JSON的結合處理。所以首先需要配置JSON相關的程式開發包

<dependency>
    <groupId>net.sf.ezmorph</groupId>
    <artifactId>ezmorph</artifactId>
    <version>1.0.6</version>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

這個時候還需要使用到JSON的開發包,但是對於這個開發包建議自己單獨配置。

實現資料的追加處理

Restful風格的主題操作都表示可以直接進行資訊的接收與處理,利用Spring MVC中提供的自動VO接收處理,以及返回JSON處理結果為方式進行一個增加的操作實現。 1、 建立一個Member.java的VO類,這個VO類需要考慮到後期針對於JSON轉換輸出操作。

package cn.mldn.vo;
import java.io.Serializable;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
@SuppressWarnings("serial")
@XmlRootElement
public class Member implements Serializable {
    private Integer mid ;
    private String name ;
    private Double salary ;
    private Date hiredate ;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在MebmerAction程式裡面建立一個處理方法; · 增加日期的處理轉換器:

private Logger log = Logger.getLogger("MemberAction.class");

    @InitBinder
    public void initBinder(WebDataBinder wdb){
        wdb.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
    }

    @RequestMapping(value="/member",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
    public @ResponseBody Object add(Member vo){
        log.info("member的add方法");
        log.info("member:" + vo);
        JSONObject obj = new JSONObject();
        obj.put("flag", true);
        return obj;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

建立一個JSP以及JS操作通過jQuery盡心呼叫處理: