正常的映射
@RestController //指示該類為一個控制器類,用來處理Rest請求 @RequestMapping("/rest/xxx/sys") //類級別映射URL跟路徑,只能用@RequestMapping public class AccountController{ @PostMapping(value = "/account/login") //響應該URL的post請求 public RestRsp<AccountMO> login(@RequestBody AccountMO account) { return null; } @GetMapping(value = "/account/{id}") //響應該URL的Get請求 public RestRsp<AccountMO> getById(@PathVariable String id) { return null; } @DeleteMapping(value = "/account/{id}") //響應該URL的Delete請求,與上面的URL相同,但請求方式不同,會被映射到相應的方法進行處理,不會出錯 public RestSimpleRsp deleteById(@PathVariable String id) { return null; } @PutMapping(value = "/account") public RestRsp<AccountMO> modify(@RequestBody AccountMO account) { return null; } @PostMapping(value = "/account") public RestRsp<AccountMO> add(@RequestBody AccountMO account) { return null; } @PostMapping(value = "/accounts") public RestRsp<AccountMO> getList(@RequestBody QueryParam queryParam) { return null; } }
小結:
同樣的URL,不同的Method(Get、Put、Post、Delete)會被映射到各自的方法上處理,這就是Rest的魅力,沒必要為每種操作定義不同URL(以前只有Post和Get,是做不到的)
注意:
如上的Controller,如果做這樣的擴展:
@GetMapping(value = "/") public String test3() { return "test3:get:"; }
訪問/rest/test會報錯404,而訪問/rest/test/則正常,可以映射到test3方法。
錯誤映射的嘗試
1、基於類級別的根URL需唯一,兩個類映射到同樣的URL是不允許的,SprintBoot啟動時就會報錯。
2、企圖通過嵌套類去擴展URL是不可行的,編譯不會報錯,SprintBoot啟動也沒問題,但是訪問URL時報404(Not Found)
如下圖的代碼,訪問URL /rest/test/2/haha/b 報404

