【工程隨筆】axios發送post請求,springBoot接收不到數據問題


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接收不到數據問題 

 

人人須日日改過,一旦無過可改,即一日無步可過矣。若發現不妥的點請務必指出,非常感謝。


免責聲明!

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



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