RESTful风格的请求

RESTful风格就是一种书写URL的要求

https://blog.csdn.net/qq_34218628/article/details/80696649

PS:面试问你会不会RESTful风格的API(其实就是问会不会用Json做数据交互,会不会用@RequestBody和@ResponseBody)

目录

A、请求参数换成key/value

B、@RequestParam

C、@RequestHeader

D、@CookieValue

E、@SessionAttribute


 

现在很多网站都用RESTful风格的URL,为了应对这种URL形式,SpringMVC里有一些注解可以方便获得URL里的值

A、请求参数换成key/value

例如请求URL都这样,抓取的请求报文里没有请求参数,key/value值在url里

其实这就是RESTful风格的写法,请求参数不用key=value,而是key/value,对应这种形式,不可能每个请求写一个Handler方法,用下面方法可以一个方法通配多个URL

    //在@RequestMapping注解的value属性,可以使用{}作为占位符,占位符的内容随意
    //再通过@PathVariable注解的value(填占位符变量),
    // 形参可以获得对应占位符的值
    @RequestMapping("RESTful/{name}/{id}")
    public User articleDetail(@PathVariable("name") String username,@PathVariable("id") Integer id) {
        return new User();
    }

发送URL不管是:http://localhost/RESTful/v/111,还是http://localhost/RESTful/m/55555,可以看到都是同一个Handler方法处理请求,并且形参是部分URL内容

B、@RequestParam

@RequestParam获得请求参数对应的值 (没啥用)

对应URL是这种风格:localhost:8080/login?username=admin&password=dd

很少人用

C、@RequestHeader

用@RequestHeader获得请求头中的值

    /**
     * @RequestHeader的value属性中写请求头的key,使用Handler方法的形参获得请求头对应的value
     * value的类型可以是字符串,也可以是字符串数组
     */
    @RequestMapping("header")
    public String header(@RequestHeader("Accept") String[] accept,
                             @RequestHeader("Cookie") String cookie) {
        return "hello";
    }

请求报文有这些请求头

接收到的参数

D、@CookieValue

通过@CookieValue获得cookie值

    /**
     * value属性中写的是cookie的key,通过key拿到对应的value,存放到handler方法的形参中
     */
    @RequestMapping("cookie")
    public String cookie(@CookieValue("name") String value2) {
        //之前获得cookie是先获得Cookie数组做遍历 → 根据cookie的name拿到指定的value
        return "hello";
    }

E、@SessionAttribute

获得session域中指定key对应的value 

    //用到占位符
    @RequestMapping("session1/{value}")//获得请求url的一部分作为session的value塞入session中
    public BaseRespVo session(HttpSession session,@PathVariable("value")String value){
        session.setAttribute("username",value);//放入session域
        return BaseRespVo.ok();
    }


    @RequestMapping("session2")
    //获得session域中key=username的value
    public BaseRespVo session2(@SessionAttribute("username") String value){
        return BaseRespVo.ok(value);
    }

 


版权声明:本文为qq_43496435原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。