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



    前端向后台传递参数主要分两类: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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    建议都使用对应的包装类型,前端未传入的值包装类型默认为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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    复杂对象参数

    @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:

    在这里插入图片描述
    后端接收入参:

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

    前端传参Map:

    在这里插入图片描述
    后端接收入参:

    @PostMapping("/postJsonMapParam")
    public R postJsonMapParam(@RequestBody Map map) {
       return success(map);
    }
    
    • 1
    • 2
    • 3
    • 4

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

  • 相关阅读:
    mybatis用拦截器实现字段加解密
    文件系统理论详解,Linux操作系统原理与应用
    椭圆曲线离散对数问题以及求解
    有序整数序列的压缩方法
    全民拼购:重新定义电商营销的新模式
    【计算机网络】图解应用层协议
    Linux 内核定时器(高级字符设备五)
    第六章:数据分组
    申报国家高新技术企业认定,这八大错误认识不能有 。
    Java 控制台 进度条
  • 原文地址:https://blog.csdn.net/qq_45297578/article/details/125903678