【SpringMVC应用篇】SpringMVC请求参数处理

【SpringMVC应用篇】SpringMVC请求参数处理

  • get和post请求的差异
  • 基本数据类型传参 (8种基本数据类型)
  • 引用数据类型传参 (数组,String)
  • 复杂对象参数
    • 前端传参List:
    • 前端传参Map:

前端向后台传递参数主要分两类:Get方式的URL路径传参和Post方式的Body请求体传参

1、URL传参数:/getParam?age=1&username="封于修"
2、Post方式的Body请求体传参: contextType = “application/x-www-form-urlencoded” contextType = “application/json”

get和post请求的差异

@GetMapping注解标记的Handle,SpringMVC参数处理只能解析Get请求中的key=value对,无法解析请求体body区域的application/x-www-form-urlencoded和application/json格式的数据
在这里插入图片描述
@PostMapping注解标记的Handle,能解析Get请求中的key=value对和解析请求体body区域的application/x-www-form-urlencoded(from表单提交的数据 key1=val1&key2=val2 )格式数据,如果两者都存在参数相同的数据,则都解析。
测试代码:controller
在这里插入图片描述
接口测试:
【SpringMVC应用篇】SpringMVC请求参数处理_第1张图片
响应结果:
在这里插入图片描述

如果需要支持解析application/json格式的数据,需要使用注解@RequestBody的支持,告诉SpringMVC使用RequestResponseBodyMethodProcessor处理器解析器解析
在这里插入图片描述

基本数据类型传参 (8种基本数据类型)

前端传参:

/getParam?a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=0&a8=a

后端接收入参:

@GetMapping("/getParam")
public R testGetParam(byte a1, short a2, int a3, long a4,
                      double a5, float a6,
                      boolean a7,
                      char a8) {
    System.out.println("a1: "+ a1);
    System.out.println("a2: "+ a2);
    System.out.println("a3: "+ a3);
    System.out.println("a4: "+ a4);
    System.out.println("a5: "+ a5);
    System.out.println("a6: "+ a6);
    System.out.println("a7: "+ a7);
    System.out.println("a8: "+ a8);
    return success(null);
}

建议都使用对应的包装类型,前端未传入的值包装类型默认为null。基本数据类型前端未传入值,后端报错
在这里插入图片描述

引用数据类型传参 (数组,String)

前端传参:

url参数: /postParam?age=1,2,3
请求体参数: body = “username=步惊云,风雨”

【SpringMVC应用篇】SpringMVC请求参数处理_第2张图片

后端接收入参:

@PostMapping("/postParam")
public R testPostParam(Integer[] age, String[] username) {
    System.out.println("age: "+ Arrays.toString(age));
    System.out.println(Arrays.toString(username));
    return success(null);
}

复杂对象参数

@RequestParam和@RequestBody的区别

1、@RequestParam可以取get方式的url路径参数和post方式的body类型为contextType = "application/x-www-form-urlencoded"的参数,当方法参数为基本数据类型时,前端未传值,可以@RequestParam给方法参数设置默认值

2、@RequestBody只能取post方式的body类型为contextType = "application/json"的参数

3、 @RequestBody 无法直接解析基本数据类和对应的包装类型,能解析对象类型: String、JavaBean、List、Set、Map

前端传参List:

【SpringMVC应用篇】SpringMVC请求参数处理_第3张图片
后端接收入参:

@PostMapping("/postJsonListParam")
public R postJsonListParam(@RequestBody List<Map> map) {
    return success(map);
}

前端传参Map:

【SpringMVC应用篇】SpringMVC请求参数处理_第4张图片
后端接收入参:

@PostMapping("/postJsonMapParam")
public R postJsonMapParam(@RequestBody Map map) {
   return success(map);
}

项目开发建议使用(@RequestBody 实体)接收,偷懒的情况可以使用(@RequestBody Map),Map接收一切对象,解决任何复杂对象的接收

你可能感兴趣的:(#,Spring全家桶,java,spring,前端)