不只適用於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 的方式來接收數據。











