目錄
一、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接收請求參數