SpringMVC @GetMapping註解路徑沖突問題解決
在SpringMVC的入門學習中,我發現@GetMapping註解的使用要註意路徑沖突問題,在網上都沒找到類似我這樣的情況,所以我在這裡將問題分享出來,希望遇到我這樣的問題的可以有個參考,但是為什麼這樣就不行我還沒搞懂,希望知道的人可以在評論區或者私信告訴我。問題如下:我的controller層有兩個查詢操作,一個是按id查詢,一個是按name模糊查詢,一開始我的程序是
@GetMapping("/{id}") public Result getById(@PathVariable Integer id) { if(id == 0){ throw new BusinessException(Code.BUSINESS_ERR,"請規范您的操作!"); } Book book = bookService.getById(id); Integer code = (book == null? Code.GET_ERR:Code.GET_OK); String msg = (book == null? "數據查詢失敗!":""); return new Result(code,book,msg); } @GetMapping(value = ("/{name}")) public Result getByName(@PathVariable String name){ //解決中文亂碼 byte[] bytes = name.getBytes(StandardCharsets.ISO_8859_1); String Name = new String(bytes,StandardCharsets.UTF_8); List<Book> bookList = bookService.getByName(Name); Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK); String msg = (bookList == null? "系統繁忙,請稍後再試!":""); return new Result(code,bookList,msg); }
此時編譯不報錯,用Apifox進行測試
可以看到無論是想用id查詢還是用name查詢都無法查詢成功,說明程序無法識別哪個是按id查詢哪個是按name查詢這時候就想到如果在每個@GetMapping中指定具體路徑呢?下面來嘗試一下
@GetMapping("/getById/{id}") @GetMapping(value = ("/getByName/{name}"))
運行結果:
可以看到通過id查詢可以查詢成功,但是通過name查詢時候無論是在路徑中添加參數還是自定義參數都無法查詢成功,這裡我也搞不明白,希望知道原理的大佬可以告訴我,十分感謝!
最終我找到的解決方案是指定參數名稱(不知道這樣說對不對,可以看代碼):
@GetMapping(value = ("/getById")) public Result getById(@RequestParam("id") Integer id) { System.out.println("id="+id); if(id == 0){ throw new BusinessException(Code.BUSINESS_ERR,"請規范您的操作!"); } //將可能出現的異常進行包裝,轉換成自定義異常 try{ int i = 1/0; }catch (Exception e){ throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服務器訪問超時,請稍後再試!",e); } Book book = bookService.getById(id); Integer code = (book == null? Code.GET_ERR:Code.GET_OK); String msg = (book == null? "數據查詢失敗!":""); return new Result(code,book,msg); } @GetMapping(value = ("/getByName")) public Result getByName(@RequestParam("name") String name){ //解決中文亂碼 要註意用SpringBoot時不需要進行中文亂碼處理 byte[] bytes = name.getBytes(StandardCharsets.ISO_8859_1); String Name = new String(bytes,StandardCharsets.UTF_8); List<Book> bookList = bookService.getByName(Name); Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK); String msg = (bookList == null? "系統繁忙,請稍後再試!":""); return new Result(code,bookList,msg); }
此時查詢:
要註意參數位置,此時可以看到兩者都查詢成功,至此問題解決,要是有大佬知道用
@GetMapping("/getById/{id}") @GetMapping(value = ("/getByName/{name}"))
這種方法怎麼做還請告訴我一下。
到此這篇關於SpringMVC @GetMapping註解路徑沖突問題解決的文章就介紹到這瞭,更多相關SpringMVC @GetMapping路徑沖突內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java SSM實現前後端協議聯調詳解上篇
- Java實現圖書管理系統的示例代碼
- Java順序表實現圖書管理系統
- Spring Cloud Gateway Hystrix fallback獲取異常信息的處理
- Spring Boot 整合持久層之JdbcTemplate