SpringMVC獲取頁面參數的問題

有時用SpringMVC的註解@PathVariable和@RequestParam接收頁面值的時候,會接收不到,會看到如下錯誤:

{ "msg":"Missing URI template variable 'noticeId' for method parameter of type int", "code":500 }

目前遇到的有兩種情況會導致出現上面的錯誤情況:

第一種:

頁面傳遞的參數名與方法的形參名不一致,此時註解不會把參數值傳遞給形參,只需要在註解後面加一個屬性就可以了,如:

<input id="userId" name="userId"></input>
此時可以用下面的方法:
public User getUserById (@RequestParam(value = "userId") int id)
@PathVariable同理,這個標籤是直接從url取值然後傳入到形參。用法:

// 頁面鏈接:<a href="sys/notice/"+ item.noticeId></a>
URL:http://localhost:8080/sys/notice/1
對應的方法:
@GetMapping("{id}")
    public ModelAndView getNoticeListByNoticeId(@PathVariable int id) {
        ModelAndView mv = new ModelAndView("system/home/notice_detail");
        mv.addObject("notice", noticeService.getNoticeListByNoticeId(id));
        return mv;
    }

第二種:

出現上面錯誤還有一種情況就是你請求的URL被改變了,如果上面@PathVariable的代碼變爲:

// 頁面鏈接:<a href="sys/notice/"+ item.noticeId></a>
URL:http://localhost:8080/sys/notice/1
對應的方法:
@GetMapping("{noticeId}")
    public ModelAndView getNoticeListByNoticeId(@PathVariable int noticeId) {
        ModelAndView mv = new ModelAndView("system/home/notice_detail");
        mv.addObject("notice", noticeService.getNoticeListByNoticeId(noticeId));
        return mv;
    }
這種情況下就會出現上面的問題,因爲我在寫的這個項目中有一個攔截器方法,此方法將路徑的所有大寫字母轉化爲小寫了,所以URL中的noticeId就會變爲noticeid,這樣一來就與形參名noticeId對應不上了,要改爲

@PathVariable(value="noticeid") int noticeId,因爲請求過來的頁面參數名已經轉換爲小寫了。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章