SpringBoot中前后端數據交互


不只適用於SpringBoot

工具:postman、IDEA

目的:測試前后端數據的交互情況、交互過程出現的明確各種問題及其解決方法

基礎知識:

  Content-Type發送信息至服務器時內容編碼類型,默認是( application/x-www-form-urlencoded 這種格式的特點就是,name/value 成為一組,每組之間用 & 聯接)。

POST請求

① Content-Type:application/x-www-form-urlencoded

  前端請求:

  后端響應1:只是對應,沒有任何注解

  后端響應2:參數添加@RequestParam注解

 

  后端響應3:參數添加@RequestBody注解,出現錯誤

錯誤:Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

 

  后端響應4:參數用@RequestBody注解,是一個Java bean

錯誤:solved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

 結論:

   當前端以application/x-www-form-urlencoded格式上傳數據時,后台可以使用@RequestParam或者不使用任何注解來獲取參數。 后台不可以使用@RquestBody來獲取參數,使用的話會報錯誤。

 

② Content-Type:application/json

  前端請求:

  后端響應1:只是對應,沒有任何注解,出錯

首先它不會獲取到任何值,然后因為age是int的,無法進行null的轉換,導致報錯

 java.lang.IllegalStateException: Optional int parameter 'age' is present but cannot be translated into a null value ....

  

  后端響應2:參數添加@RequestParam注解,出錯

 

Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'name' is not present]

結論:

 當前端以application/json格式上傳即使用JSON字符串,后台使用@RequestParam是無法一一對應來獲取參數的。

 

  后端響應3:參數添加@RequestBody注解,出錯

錯誤:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.panlei.practiceboot.controller.UserController.addUser(java.lang.String,int,java.lang.String,java.lang.String)]

結論:

 當前端以application/json格式上傳即使用JSON字符串,后台使用@RequestBody是無法一一對應來獲取參數的。

   

  后端響應4:參數用@RequestBody注解,是一個Java bean,成功

   后端響應4:參數用@RequestBody注解,是一個Map,成功

 

總的結論:

  當前端使用application/json來傳遞數據的時候,后端只能使用 @RequestBody 以及 Java bean或者 map 的方式來接收數據。

 


免責聲明!

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



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