# Spring Boot課程筆記3: URL路由器&注解說明 ## 1.RESTful URL ### 典型的前後端分離URL設計風格 * **GET http://localhost:8080/aip/v1/books 獲取所有讀書清單列表** * **POST http://localhost:8080/aip/v1/books 新增一個書單** * **GET http://localhost:8080/aip/v1/books/{id} 獲取一個指定書單** * **PUT http://localhost:8080/aip/v1/books 更新書單** * **DELETE http://localhost:8080/aip/v1/books/{id} 刪除一個書單** -每個URL都代表一個資源或著是資源的狀態轉換 -通常定義URL皆用名詞且大多為複數 EX: *books* -所有資源狀態轉換都是根據不同請求類型作為區分 ## 2.注解 ### @RestController * **將被標注的類別定義為Web Controller** -凡是被標注的類別,裡面method如值為Spring則直接return,如為物件則會透過Json格式return ### @RequestMapping * **通常應用在method或class上** -根據value參數中相對應URL的Web請求,並於method中進行映射處理 -根據method參數中的定義決定進行何種請求處理(常見的GET/ POST/ PUT/ DELETE),如未定義 RequestMethod則默認接受所有請求類型 `@RequestMapping(value = "/say", method = RequestMethod.GET)` -如定義在類別上則提供最初步的URL定義訊息,如下方CODE其URL即為*http://localhost:8080/api/says* ``` @RestController @RequestMapping("/api") public class HelloController { @RequestMapping(value = "/say", method = RequestMethod.GET) public String hello() { return "Hello Spring Boot"; } } ``` * **@RequestMapping簡寫方式** -例如 *@PostMapping* 則支援POST請求,以此類推 ``` @RestController @RequestMapping("/api") public class HelloController { //@RequestMapping(value = "/say", method = RequestMethod.GET) @PostMapping("/say") public String hello() { return "Hello Spring Boot"; } } ``` ### @Controller * **非Rest風格返回值** -透過映射方法中的return值找尋相對應的template,如範例程式 http://localhost:8080/api/books 該連結會映射至resources中template資料夾的books.html ``` //@RestController @Controller @RequestMapping("/api") public class HelloController { //@RequestMapping(value = "/say", method = RequestMethod.GET) @PostMapping("/say") public String hello() { return "Hello Spring Boot"; } @GetMapping("/books") public String getAll() { return "books"; } } ``` -@ResponseBody標注method則可在@Contoller類別中實現與RestController一樣的效果,下方範例程式中 http://localhost:8080/api/books 會透過Json格式返回Map物件 `{ "name": "hello", "age": 18 }` ``` //@RestController @Controller @RequestMapping("/api") public class HelloController { //@RequestMapping(value = "/say", method = RequestMethod.GET) @PostMapping("/say") public String hello() { return "Hello Spring Boot"; } @GetMapping("/books") @ResponseBody public Object getAll() { Map<String, Object> map = new HashMap<>(); map.put("name", "hello"); map.put("age", 18); return map; } } ``` [RESTful API學習資源](https://www.ruanyifeng.com/blog/2014/05/restful_api.html) [參考課程Reference](https://www.udemy.com/course/spring-boot-u/) ###### tags: `Spring Boot`