天天看點

SpringMVC-REST風格簡介及RESTful入門案例

目錄

​​一、REST簡介​​

​​二、RESTful入門案例​​

​​三、@RequestBody、@RequestParam、@PathVariable的差別與應用​​

一、REST簡介

REST簡介(Representational State Transfer),表現形式狀态轉換

傳統風格資源描述形式

​​http://localhost/user/​​getById?id=1

​​http://localhost/user/​​saveUser

REST風格描述形式

​​http://localhost/user/1​​

​​http://localhost/user​​

優點:

1、隐藏資源的通路行為,無法通過位址得知對資源是何種操作

2、書寫簡化 

按照REST風格通路資源時使用行為動作區分對資源進行了何種操作

http://localhost/users           查詢全部使用者資訊 GET(查詢)

http://localhost/users/1        查詢指定使用者資訊 GET(查詢)

http://localhost/users           添加使用者資訊        POST(新增/儲存)

http://localhost/users           修改使用者資訊        PUT(修改/更新)

http://localhost/users/1        删除使用者資訊        DELETE(删除)

注意事項:

上述行為是約定方式,約定不是規範,可以打破,是以稱為REST風格,而不是REST規範

描述子產品名稱通常使用負數,也就是加s的格式描述,表示此類資源,而非單個資源,例如:users、books、accounts......

二、RESTful入門案例

import com.itheima.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class UserController {

    //設定目前請求方法為POST,表示REST風格中的添加操作
    @RequestMapping(value = "/users",method = RequestMethod.POST)
    @ResponseBody
    public String save(){
        System.out.println("user save...");
        return "{'module':'user save'}";
    }

    //設定目前請求方法為DELETE,表示REST風格中的删除操作
    //@PathVariable注解用于設定路徑變量(路徑參數),要求路徑上設定對應的占位符,并且占位符名稱與方法形參名稱相同
    @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@PathVariable Integer id){
        System.out.println("user delete..." + id);
        return "{'module':'user delete'}";
    }

    //設定目前請求方法為PUT,表示REST風格中的修改操作
    @RequestMapping(value = "/users",method = RequestMethod.PUT)
    @ResponseBody
    public String update(@RequestBody User user){
        System.out.println("user update..."+user);
        return "{'module':'user update'}";
    }

    //設定目前請求方法為GET,表示REST風格中的查詢操作
    //@PathVariable注解用于設定路徑變量(路徑參數),要求路徑上設定對應的占位符,并且占位符名稱與方法形參名稱相同
    @RequestMapping(value = "/users/{id}" ,method = RequestMethod.GET)
    @ResponseBody
    public String getById(@PathVariable Integer id){
        System.out.println("user getById..."+id);
        return "{'module':'user getById'}";
    }

    //設定目前請求方法為GET,表示REST風格中的查詢操作
    @RequestMapping(value = "/users",method = RequestMethod.GET)
    @ResponseBody
    public String getAll(){
        System.out.println("user getAll...");
        return "{'module':'user getAll'}";
    }

}      

在postman修改相應的請求方式,對應相應的操作。

1、設定http請求動作(動詞)

@RequestMapping(value = "/users",method = RequestMethod.POST)
    @ResponseBody
    public String save(){
        System.out.println("user save...");
        return "{'module':'user save'}";
    }

    @RequestMapping(value = "/users",method = RequestMethod.PUT)
    @ResponseBody
    public String update(@RequestBody User user){
        System.out.println("user update..."+user);
        return "{'module':'user update'}";
    }      

2、設定請求參數(路徑變量)

@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@PathVariable Integer id){
        System.out.println("user delete..." + id);
        return "{'module':'user delete'}";
    }      

名稱:@RequestMapping

類型:方法注解

位置:SpringMVC控制器方法定義上方

作用:設定目前控制器方法請求通路路徑

範例:

​ @RequestMapping(value = "/users",method = RequestMethod.POST) @ResponseBody public String save(){ System.out.println("user save..."); return "{'module':'user save'}"; }​

屬性

value(預設):請求通路路徑

method:http請求動作,标準動作(GET/POST/PUT/DELETE)

名稱:@PathVariable

類型:形參注解

位置:SpringMVC控制器方法形參定義前面

作用:綁定路徑參數與處理器方法形參間的關系,要求路徑參數名與形參名一 一對應

範例:

​ @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE) @ResponseBody public String delete(@PathVariable Integer id){ System.out.println("user delete..." + id); return "{'module':'user delete'}"; }​

三、@RequestBody、@RequestParam、@PathVariable的差別與應用

差別:

■ @RequestParam用于接收url位址傳參或表單傳參

■ @RequestBody用于接收json資料

■ @PathVariable用于接收路徑參數,使用{參數名稱}描述路徑參數

應用:

■ 後期開發中,發送請求參數超過1個時,以json格式為主,@RequestBody應用較廣

■ 如果發送非json格式資料,選用@RequestParam接收請求參數