美文网首页
【SpringBoot】http请求注解之Get请求

【SpringBoot】http请求注解之Get请求

作者: 瑞瑞余之 | 来源:发表于2019-03-29 16:10 被阅读0次

    在介绍Get请求相关注解之前,我认为正确的学习姿势,应该先瞅一眼Get请求的常见格式:

    • url:port/path/param1/param2
      例如 localhost:8080/get_method/mode_1/tony/89
    • url:port/path?param1=xxx&param2=xxx
      例如 localhost:8080/get_method/mode_2/name=tony&age=89
      对于这两种类型,服务端在接受get请求时,为了取得相应参数有相应两种不同注解:@PathVariable和@RequestParam,这两个注解有什么不同,我们可以从下面两个例子中看出一二:
    @RestController
    @RequestMapping("get_method")
    public class GetController {
    
        @GetMapping(path = "mode_1/{name}/{age}")
        public Map getUrlPathParam(@PathVariable("name") String name, @PathVariable String age) {
            return new HashMap(){{
                put("name", name);
                put("age", age);
            }};
        }
    
        @GetMapping("mode_2")
        public Map getQueryParam(@RequestParam(name = "name") String name, @RequestParam(defaultValue = "100") String age) {
            return new HashMap(){{
                put("name", name);
                put("age", age);
            }};
        }
    }
    

    这时候当你在postman或是浏览器中调用:
    localhost:8080/get_method/mode_1/tony/89或是localhost:8080/get_method/mode_2?name=tony&age=89,就可以得到对应的返回值

    Get请求返回值
    值得一提的是,在第一个方法的形参处由于url中参数名和我定义的方法参数名一致,所以@PathVariable的参数可以省略。需要注意的一点:在以上代码中所有跟协议相关的地方,比如在这里会成为url组成部分的"get_method","mode_1"等自定义参数,我在写的时候都是用的带下划线的小写字母,而不是驼峰形式,这里也是一种编码规范:跟协议有关的自定义变量尽量都用小写的形式(似乎是因为驼峰这种大小写都存在的形式,作为协议接口不友好,可能造成不能处理或是处理方式不一致的情况,所以尽量注意)

    说到这里顺便介绍一下查看和理解注解支持的参数,当我们查看某个注解的定义时,以@RequestParam为例:

    @Target({ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface RequestParam {
        @AliasFor("name")
        String value() default "";
    
        @AliasFor("value")
        String name() default "";
    
        boolean required() default true;
    
        String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
    }
    

    @Target @Retention @Documented基本是废话,对理解具体注解没有帮助,我就不聊了,注解的成员方法所指代的就是这个注解可以做的些事情,而有的方法上方有@AliasFor则表示在调用该注解时,里面的参数名可以用这个别名当然也可以直接用方法名,就像上面代码示例一样@RequestParam(name = "age")就表示取请求参数中名称为age的参数。我举的这个例子有点意思,大家会发现如果按我的解释,@RequestParam(name = "age")和@RequestParam(value = "age")其实是一个意思,经验证,的确是一样的效果。

    相关文章

      网友评论

          本文标题:【SpringBoot】http请求注解之Get请求

          本文链接:https://www.haomeiwen.com/subject/oqwxbqtx.html