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

x33g5p2x  于2022-07-22 转载在 Spring  
字(2.1k)|赞(0)|评价(0)|浏览(527)

前端向后台传递参数主要分两类: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

接口测试:

响应结果:

如果需要支持解析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=步惊云,风雨”

后端接收入参:

@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"的参数

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

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

前端传参List:

后端接收入参:

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

前端传参Map:

后端接收入参:

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

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

相关文章