spring mvc 坑之PUT,DELETE方法接收不到請求參數


https://www.cnblogs.com/roobtyan/p/9576685.html

 

 

原因:

 Tomcat處理參數的問題:

   1.將請求體中的數據,封裝成一個map
    2.request.getParameter("id")就會從這個map中取值
    3.SpringMvc封裝POJO對象的時候, 會把POJO中每個屬性的值進行request.getParamter();
    4.AJAX發送PUT,DELETE請求引發的PUT,DELETE請求,請求體中的數據,request.getParamter()拿不到
   Tomcat一看是PUT,DELETE就不會封裝請求體中的數據為map,只有POST形式的請求才封裝請求為map。

 

 

解決方案

這個問題有兩種解決方案,第一種比較復雜,第二種比較簡單,正常我們肯定是使用第二種的,當然並不排除使用第一種方式的場景.

方案一

  • 配置web.xml文件
  • 將POST請求轉發為put/delete請求
<!--使用Rest風格的URI-->
<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>

  

在發送Ajax請求的時候,使用如下的格式:

$.ajax({
    url: "${pageContext.request.contextPath}/emp/" + id,
    type: "POST",
    data: $("#app form").serialize() +"&_method=PUT",
    success: function (result) {
        alert("操作成功!");
    }
});

  

可以看到不同的地方,首先配置HiddenHttpMethodFilter,這個類可以把POST轉換成對應的_method=?的?號中的內容,從而實現請求.當然每次寫Ajax請求的時候,都需要協商method字段,便於解析.

方案二

方案二就比較簡單了.只需要一個簡單的web.xml的配置.

<!--配置SpringMVC,把PUT或者DELETE請求轉換成POST-->
<filter>
    <filter-name>HttpPutFormContentFilter</filter-name>
    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HttpPutFormContentFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  

或者

<!-- 解決ajax put delete請求過濾 -->
    <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>

  

 

然后就可以很自然的使用Ajax請求而不需要做任何的處理.

$.ajax({
    url: "${pageContext.request.contextPath}/emp/" + id,
    type: "PUT",
    data: $("#app form").serialize(),
    success: function (result) {
        alert("操作成功!");
    }
});

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM