javascript
SpringMVC控制器接收不了PUT提交的参数的解决方案
找到web項目的web.xml的文件的ContextLoaderListener這個監聽器,將這個改為下面的配置:
<!-- 解決PUT請求無法提交表單數據的問題 --> <filter><filter-name>HttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping><filter-name>HttpMethodFilter</filter-name><url-pattern>/*</url-pattern> </filter-mapping><!-- 將POST請求轉化為DELETE或者是PUT 要用_method指定真正的請求參數 --> <filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern> </filter-mapping>如果以上方法會出現springmvc請求參數獲取不到的話,請改為下面的方式:
<!-- 解決PUT請求無法提交表單數據的問題 --><filter><filter-name>HttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class></filter><filter-mapping><filter-name>HttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 將POST請求轉化為DELETE或者是PUT 要用_method指定真正的請求參數 --><filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><!--servlet為springMvc的servlet名 --><servlet-name>SpringMVC</servlet-name></filter-mapping>現在再用put請求就沒問題了。
如果以上的方法還是不能夠解決你的問題的話,我還遇到過其他的解決方法。
1、當你的springmvc的controller方法是以下時
/*** 修改用戶* @param user* @return*/@RequestMapping(value = "/user", method = RequestMethod.PUT)public ResponseEntity updateUserByUserId(User user){try {userService.updateUserById(user);} catch (Exception e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}return ResponseEntity.status(HttpStatus.OK).body(null);}這里直接用pojo,來接收前端發送過來的數據,但是這種方法我做項目的時候就是獲取不了數據。然后,我就想著用@RequestParam注解看能不能解決,于是,變成了下面的代碼:
2、用@RequestParam試試
/*** 修改用戶* @param user* @return*/@RequestMapping(value = "/user", method = RequestMethod.PUT)public ResponseEntity updateUserByUserId(@RequestParam("user")User user){try {userService.updateUserById(user);} catch (Exception e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}return ResponseEntity.status(HttpStatus.OK).body(null);}但是,很難受,還是不行,而且,這樣還會報一個user is not present 的錯誤。這個錯誤的意思是這個user不存在
解決這個錯誤方法:
**1、**如果你獲取到了前端的數據,那么很簡單在@RequestParam加上一個參數required=false,這個值默認為true,作用為:在傳參數的時候,必須要有值,不然就報錯。
@RequestParam(value= "user", required= false)User user**2、**如果沒有獲取到前端的數據,那個悲劇了,我就找了好久解決。
**解決方法:**不用@RequestParam,換成@requestBody注解就解決了。
@requestBody:如果方法加上了@ResponseBody注解,Spring返回值到響應體。如果這樣做的話,Spring將根據請求中的 Content-Type header(私下)使用 HTTP Message converters 來將domain對象轉換為響應體。
也就是,在前端測試的時候,用json格式的數據來解決就行,這也正好符合前后端分離的效果。
總結
以上是生活随笔為你收集整理的SpringMVC控制器接收不了PUT提交的参数的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.lang.IllegalArg
- 下一篇: ssm项目整合log4j日志