当前位置 博文首页 > blackball1998的博客:自动封装前端参数

    blackball1998的博客:自动封装前端参数

    作者:[db:作者] 时间:2021-06-19 19:55

    自动封装前端参数

    除了用String类型或者基础数据类型接收参数,Spring MVC还可以帮我们使用集合框架或者自定义类自动封装前端的参数

    参数封装为List

    当同名的前端参数有多个时,可以使用一个List类,来作为请求接收方法的参数,参数名和请求中的参数名绑定,这样Spring MVC就会将这个参数封装成一个List类

    @RestController
    public class MyController {
    
        @GetMapping(path = "/user")
        public Map<String, Object> queryUser(@RequestParam String name, @RequestParam List<String> hobby) {
            HashMap<String, Object> result = new HashMap<>();
            result.put("name",name);
            result.put("hobby", hobby);
            return result;
        }
    }
    

    测试结果如下

    在这里插入图片描述

    参数封装为Map

    我们还可以使用一个Map类,作为请求方法的参数,添加上@RequestParam注解,这样Spring MVC会将所有的参数以键值对的形式全部封装在这个Map类中,这个Map类可以是<String, String>的泛型,也可以是<String, Object>的泛型

    @RestController
    public class MyController {
    
        @GetMapping(path = "/user")
        public Map<String, String> queryUser(@RequestParam Map<String, String> params) {
            return params;
        }
    }
    

    测试结果如下

    在这里插入图片描述

    Map类被称为“万能的Map”,在很多种请求参数的封装中都可以用这种数据类型,除此之外他还适用于以下情况

    • 使用@PathVariable注解获取路径参数
    • 使用@RequestBody注解获取请求体中的参数
    • 使用@RequestHeader注解获取请求头中的参数
    • 作为方法参数将变量保存在request域中

    参数封装为自定义类

    Spring MVC还可以把前端参数封装成我们自定义的一个类

    首先我们先定义一个自定义的Person类

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Person {
    
        private String name;
        private int age;
    }
    

    在请求处理方法中,将一个Person对象作为参数,注意这里不需要添加@RequestParam注解

    @RestController
    public class MyController {
    
        @GetMapping(path = "/user")
        public Person queryUser(Person person) {
            return person;
        }
    }
    

    然后我们将Person类的属性作为在请求中携带的参数,这样就可以将请求中的参数转换成Person对象的属性

    在这里插入图片描述

    这种封装方式同样适用于使用@RequestBody注解获取请求体中的参数的情况