您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“SpringMVC @GetMapping注解路徑沖突問題怎么解決”,內容詳細,步驟清晰,細節處理妥當,希望這篇“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注解路徑沖突問題怎么解決”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。