axios發送post請求,springBoot接收不到數據問題?
在正常情況(代碼無錯、網絡正常等)下,不是收不到,而是不會拿!
根本的問題在於以下兩點:
1)請求發送時,其數據存放在哪?
2)接收請求時,從那獲取請求所攜帶的數據?
先來對比一下<form>中的原生post請求與axios.post
后端測試post請求的一個接口:http://localhost:9001/api/test/post
源碼如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Test</title> 6 </head> 7 <body> 8 <!-- test form to post --> 9 <h1>test form to post</h1> 10 <form action="http://localhost:9001/api/test/post" method="post"> 11 <input type="text" name="id" /> 12 <input type="text" name="password" /> 13 <input type="submit" value="提交"> 14 </form> 15 <hr /> 16 17 <!-- test axios to post --> 18 <h1>test axios to post</h1> 19 <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 20 <script> 21 function startPost() { 22 const url = 'http://localhost:9001/api/test/post'; 23 axios.post(url,{ 24 id: '李四', 25 password: 123456 26 }) 27 } 28 </script> 29 <button onclick="startPost()">axios to post</button> 30 </body> 31 </html>
接口代碼:其中Admin是一個擁有id、password屬性的要給簡單對象
用Wireshark捕獲到的請求數據情況如下:
很直觀看到兩種方式的http請求的Content-Type不一樣
Content-Type不一樣其請求參數存放的位置(或者說是字段)也可能不一樣,再細看:
對於這些存放的位置的專業術語(方法體、請求體什么的)不太懂,
但是可以簡單地推斷出在springMVC使用默認映射參數的方法時是會在“HTML Form URL Encoded”中獲得參數,
而不會在“JavaScript Object Notation”中獲得參數。
在理論上,解決“axios發送post請求,springBoot接收不到數據”這么個問題有了兩個很明了的方向:
1)在前端中,將請求參數存放在后端接口默認能取到的地方;
2)在后端中,根據前端的請求方式,改變獲取參數的地方。
(注:如果開發是面對接口的,針對這種情況,在開發時的接口文檔中也應注明請求參數的存放信息等)
具體操作參考:axios發送post請求,springMVC接收不到數據問題
人人須日日改過,一旦無過可改,即一日無步可過矣。若發現不妥的點請務必指出,非常感謝。