SpringBoot2:请求处理原理分析-接口参数的常用注解

1、@PathVariable

作用说明:获取路径参数

案例:
接口收参形式:

    @GetMapping("/car/{id}/owner/{username}")
    public Map<String,Object> getCar(
                                     @PathVariable("id") Integer id,
                                     @PathVariable("username") String name,
                                     @PathVariable Map<String,String> pv
    ){
        Map<String,Object> map = new HashMap<>();
        map.put("id",id);
        map.put("name",name);
        map.put("pv",pv);
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi

返回结果:

{
    "pv": {
        "id": "3",
        "username": "lisi"
    },
    "name": "lisi",
    "id": 3
}

可以用Map<String,String>接收全部路径参数。

2、@RequestHeader

作用说明:获取请求头参数

案例:
接口收参形式:

    @GetMapping("/car/{id}/owner/{username}")
    public Map<String,Object> getCar(
                                     @RequestHeader("User-Agent") String userAgent,
                                     @RequestHeader Map<String,String> header
    ){
        Map<String,Object> map = new HashMap<>();
        map.put("userAgent",userAgent);
        map.put("headers",header);
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi

返回结果:

{
    "headers": {
        "user-agent": "PostmanRuntime/7.26.8",
        "accept": "*/*",
        "cache-control": "no-cache",
        "postman-token": "7651f635-068b-4fe6-8e26-4990ef714349",
        "host": "127.0.0.1:8080",
        "accept-encoding": "gzip, deflate, br",
        "connection": "keep-alive"
    },
    "userAgent": "PostmanRuntime/7.26.8"
}

可以用Map<String,String>接收全部Header参数。

3、@RequestParam

作用说明:获取请求参数,就是以往的GET请求传参方式。

案例:
接口收参形式:

    @GetMapping("/car/{id}/owner/{username}")
    public Map<String,Object> getCar(
                                     @RequestParam("age") Integer age,
                                     @RequestParam("inters") List<String> inters,
                                     @RequestParam Map<String,String> params
    ){
        Map<String,Object> map = new HashMap<>();
        map.put("age",age);
        map.put("inters",inters);
        map.put("params",params);
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi?age=18&inters=basketball&inters=game

返回结果:

{
    "inters": [
        "basketball",
        "game"
    ],
    "params": {
        "age": "18",
        "inters": "basketball"
    },
    "age": 18
}

可以用Map<String,String>接收全部GET请求参数参数。

4、@RequestBody

作用说明:获取form表单请求体参数,就是以往的POST请求传参方式。

案例:
接口收参形式:

    @PostMapping("/save")
    public Map postMethod(@RequestBody String content){
        Map<String,Object> map = new HashMap<>();
        map.put("content",content);
        return map;
    }

请求传参形式:

<form action="/save" method="post">
    用户名:<input name="userName"/> <br>
    邮箱:<input name="email"/>
    <input type="submit" value="提交"/>
</form>

返回结果:
在这里插入图片描述
注意:
如果你用postman测试接口。
那么,@RequestBody收参时,对应的传参方式如下:
在这里插入图片描述
如果你想用postman传递form-data参数,就必须要用@RequestParam注解,并且key要对应上。

5、@CookieValue

作用说明:获取cookie参数

案例:
接口收参形式:

    @GetMapping("/car/{id}/owner/{username}")
    public Map<String,Object> getCar(
                                     @CookieValue("_ga") String _ga,
                                     @CookieValue("_ga") Cookie cookie
    ){
        Map<String,Object> map = new HashMap<>();
        map.put("_ga",_ga);
        System.out.println(cookie.getName()+"===>"+cookie.getValue());
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi?age=18&inters=basketball&inters=game

浏览器添加Cookie
在这里插入图片描述
Postman添加cookie
在这里插入图片描述
返回结果:

{
    "_ga": "123456789"
}

6、@RequestAttribute

作用说明:页面转发时,用于获取request属性。

案例:
接口收参形式:
转发接口

    @GetMapping("/goto")
    public String goToPage(HttpServletRequest request){

        request.setAttribute("msg","成功了...");
        request.setAttribute("code",200);
        return "forward:/success";  //转发到  /success请求
    }

目标接口

    @ResponseBody
    @GetMapping("/success")
    public Map success(@RequestAttribute(value = "msg",required = false) String msg,
                       @RequestAttribute(value = "code",required = false)Integer code,
                       HttpServletRequest request){
        Object msg1 = request.getAttribute("msg");
        Map<String,Object> map = new HashMap<>();
        map.put("reqMethod_msg",msg1);
        map.put("annotation_msg",msg);
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/goto

在这里插入图片描述

返回结果:

{
    "reqMethod_msg": "成功了...",
    "annotation_msg": "成功了..."
}

7、@MatrixVariable

作用说明:获取矩阵参数,如果浏览器禁用了cookie,那么,就用它传递cookie参数。

案例:
开启矩阵参数功能:
在配置类中,向IOC容器注册一个WebMvcConfigurer实例。

    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void configurePathMatch(PathMatchConfigurer configurer) {
                UrlPathHelper urlPathHelper = new UrlPathHelper();
                // 不移除;后面的内容。矩阵变量功能就可以生效
                urlPathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(urlPathHelper);
            }
        };
    }

接口收参形式:

形式1
    //1、语法: 请求路径:/cars/sell;low=34;brand=byd,audi,yd
    //2、SpringBoot默认是禁用了矩阵变量的功能
    //      手动开启:原理。对于路径的处理。UrlPathHelper进行解析。
    //              removeSemicolonContent(移除分号内容)支持矩阵变量的
    //3、矩阵变量必须有url路径变量才能被解析
    @GetMapping("/cars/{path}")
    public Map carsSell(@MatrixVariable("low") Integer low,
                        @MatrixVariable("brand") List<String> brand,
                        @PathVariable("path") String path){
        Map<String,Object> map = new HashMap<>();

        map.put("low",low);
        map.put("brand",brand);
        map.put("path",path);
        return map;
    }
 
 形式2
    // /boss/1;age=20/2;age=10

    @GetMapping("/boss/{bossId}/{empId}")
    public Map boss(@MatrixVariable(value = "age",pathVar = "bossId") Integer bossAge,
                    @MatrixVariable(value = "age",pathVar = "empId") Integer empAge){
        Map<String,Object> map = new HashMap<>();

        map.put("bossAge",bossAge);
        map.put("empAge",empAge);
        return map;

    }

请求传参形式:

形式1
http://127.0.0.1:8080/cars/sell;low=34;brand=byd,audi,yd
http://127.0.0.1:8080/cars/sell;low=34;brand=byd;brand=audi;brand=yd
形式2
http://127.0.0.1:8080/boss/1;age=20/2;age=10

返回结果:

结果1
{
    "path": "sell",
    "low": 34,
    "brand": [
        "byd",
        "audi",
        "yd"
    ]
}
结果2
{
    "bossAge": 20,
    "empAge": 10
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值