日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC控制器接收不了PUT提交的参数的解决方案

發布時間:2025/3/20 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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提交的参数的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。