天天看點

Spring MVC出現POST 400 Bad Request &405 Request method 'GET' not supported

首先描述一下出現錯誤的情景:

我剛學springmvc,想做一個登入界面的東西。然後試着寫了一個controller如下:

<code>@RequestMapping(value = "/login", method = RequestMethod.POST) public String login( String name, String password, Model model) { User u = userService.login(name, password); if (u == null) throw new UserException("no user exist!"); if (!u.getPassword().equals(password)) { throw new UserException("password is not right!"); } model.addAttribute("loginUser", u); return "redirect:/user/users"; }</code>

然後就出現了 400 badrequest這個錯誤了。網上找資料,說是屬性不比對吧,于是找jsp頁面的錯誤,沒有不比對的地方,于是添加

<code>log4j.logger.org.springframework.web=debug</code>到log4j日志裡面,果然出現錯誤的地方了。究其原因是

因為這個mapping位址localhost:8080/xxx/user/id(int類型)的,

login的mapping位址localhost:8080/xxx/user/login(String類型)的,

是以在dispatch的時候,spring誤認為是要去通路show這個方法,就造成了資料類型不比對,也就是String型無法轉變為int類型的錯誤,也就造成了400 bad request錯誤了,如此,解決方法就是在show方法的

<code>@RequestMapping(value = "/{id}", method = RequestMethod.GET)</code>改為

<code>@RequestMapping(value = "show/{id}", method = RequestMethod.GET)</code>這樣就差別開了。

到此,第一個問題解決。方法是

先檢查一下資料類型是否比對。

自己檢查不到,就用控制台輸出一個debug資訊,然後檢視,Springmvc中<code>log4j.logger.org.springframework.web=debug</code>到log4j日志裡面

檢視資訊,修改即可。

405 Request method ‘GET’ not supported

這個錯誤,純屬自己的問題了,我也檢視了jsp頁面送出方法是post,然後controller的方法也是method = RequestMethod.POST,怎麼會出現GET請求呢?原來是我直接通路login頁面。

我在controller中寫了一個方法,将視圖轉到login頁面就解決了

如下:

<code>@RequestMapping(value="",method=RequestMethod.GET) public String index(){ return "user/login"; }</code>

另,附上我在網上查找資料的時候,别人遇到的一些錯誤原因:

這個問題主要出現在有兩個GET,不知道映射哪個。controller中create跟getView方法

如有錯誤,請指出,剛學習springmvc不久。謝謝!