SpringBoot中前后端数据交互

不只适用于SpringBoot

工具:postman、IDEA

目的:测试前后端数据的交互情况、交互过程出现的明确各种问题及其解决方法

基础知识:

  Content-Type发送信息至服务器时内容编码类型,默认是( application/x-www-form-urlencoded 这种格式的特点就是,name/value 成为一组,每组之间用 & 联接)。

POST请求

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

  前端请求:

SpringBoot中前后端数据交互_第1张图片

  后端响应1:只是对应,没有任何注解

SpringBoot中前后端数据交互_第2张图片

  后端响应2:参数添加@RequestParam注解

 SpringBoot中前后端数据交互_第3张图片

  后端响应3:参数添加@RequestBody注解,出现错误

SpringBoot中前后端数据交互_第4张图片

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

 

  后端响应4:参数用@RequestBody注解,是一个Java bean

SpringBoot中前后端数据交互_第5张图片

错误: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

  前端请求:

SpringBoot中前后端数据交互_第6张图片

  后端响应1:只是对应,没有任何注解,出错

SpringBoot中前后端数据交互_第7张图片

首先它不会获取到任何值,然后因为age是int的,无法进行null的转换,导致报错

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

  

  后端响应2:参数添加@RequestParam注解,出错

 SpringBoot中前后端数据交互_第8张图片

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

结论:

 当前端以application/json格式上传即使用JSON字符串,后台使用@RequestParam是无法一一对应来获取参数的。

 

  后端响应3:参数添加@RequestBody注解,出错

SpringBoot中前后端数据交互_第9张图片

错误: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,成功

SpringBoot中前后端数据交互_第10张图片

   后端响应4:参数用@RequestBody注解,是一个Map,成功

SpringBoot中前后端数据交互_第11张图片

 

总的结论:

  当前端使用application/json来传递数据的时候,后端只能使用 @RequestBody 以及 Java bean或者 map 的方式来接收数据。

 

你可能感兴趣的:(SpringBoot中前后端数据交互)