当前位置:首页 » 《我的小黑屋》 » 正文

SpringBoot(接受参数相关注解)

23 人参与  2024年03月20日 17:37  分类 : 《我的小黑屋》  评论

点击全文阅读


文章目录

1.基本介绍2.@PathVariable 路径参数获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 3.@RequestHeader 请求头获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 4.@RequestParameter 请求获取参数信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 5.@CookieValue cookie获取值1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 6.@RequestBody 处理json请求,post请求体获取信息1.代码实例1.index.html2.ParameterController.java3.测试 7.@RequestAttribute 请求域获取信息1.代码实例1.RequestController.java2.配置视图解析器 application.yml3.测试 8.@SessionAttribute session域获取信息1.代码实例1.SessionController.java2.配置视图解析器(同上)3.测试 9.复杂参数1.代码实例1.RequestController.java2.测试 2.HttpServletResponse给浏览器设置cookie1.代码实例2.测试

1.基本介绍

image-20240314115739021

2.@PathVariable 路径参数获取信息

1.代码实例
1.index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>基本注解</h1><hr/><a href="/monster/100/king">@PathVariable-路径变量:/monster/100/king</a></body></html>
2.ParameterController.java
package com.sun.springboot.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import java.util.Map;/** * @author 孙显圣 * @version 1.0 */@RestControllerpublic class ParameterController {    @GetMapping("/monster/{id}/{name}") //接受两个路径参数    public String pathVariable(@PathVariable("id") Integer id, @PathVariable("name") String name,                               @PathVariable Map<String, String> map) { //这里的map指将所有的路径参数都放到map中        System.out.println("id:" + id + " name:" + name);        for (Map.Entry<String, String> entry : map.entrySet()) {            System.out.println("key:" + entry.getKey() + " value: " + entry.getValue());        }        return "success"; //返回json给浏览器    }}
3.测试

image-20240314132013427

image-20240314132028528

2.细节说明
@PathVariable(“xxx”)必须跟{xxx}相对应可以将所有的路径参数放到map中 @PathVariable Map<String, String> map

3.@RequestHeader 请求头获取信息

1.代码实例
1.index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>基本注解</h1><hr/><a href="/requestHeader">@RequestHeader-获取请求头信息</a></body></html>
2.ParameterController.java
package com.sun.springboot.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestHeader;import org.springframework.web.bind.annotation.RestController;import java.util.Map;/** * @author 孙显圣 * @version 1.0 */@RestControllerpublic class ParameterController {    @GetMapping("/requestHeader") //获取请求头的信息    public String requestHeader(@RequestHeader("host") String host, @RequestHeader Map<String, String> header) {        System.out.println("host:" + host);        System.out.println(header);        return "success";    }}
3.测试

image-20240314134629880

image-20240314134644676

2.细节说明
请求头的信息都是以key - value的形式存储的可以通过@RequestHeader(“xxx”)来获取xxx对应的value也可以通过@RequestHeader Map<String, String> header将所有的key - value都封装到map中

4.@RequestParameter 请求获取参数信息

1.代码实例
1.index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>基本注解</h1><hr/><a href="/hi?hobby=打篮球&hobby=踢球">@RequestParam-请求参数</a></body></html>
2.ParameterController.java
package com.sun.springboot.controller;import org.springframework.web.bind.annotation.*;import java.util.List;/** * @author 孙显圣 * @version 1.0 */@RestControllerpublic class ParameterController {    @GetMapping("/hi")    public String hi(@RequestParam(value = "name", defaultValue = "孙显圣") String name,                     @RequestParam("hobby") List<String> list) {        System.out.println("name:" + name);        System.out.println(list);        return "success";    }}
3.测试

image-20240314135930766

image-20240314135936925

2.细节说明
请求参数是可以设置默认值的,使用defaultValue属性即可请求参数还可以将同名的结果封装到List中请求参数也可以使用@RequestParameter Map<String, String> map 将所有参数封装到map中,但是如果有同名的结果只会得到第一个,因为map的key是唯一的

5.@CookieValue cookie获取值

1.代码实例
1.index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>基本注解</h1><hr/><a href="/cookie">@CookieValue-获取cookie的值</a></body></html>
2.ParameterController.java
package com.sun.springboot.controller;import org.springframework.web.bind.annotation.*;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;/** * @author 孙显圣 * @version 1.0 */@RestControllerpublic class ParameterController {    @GetMapping("/cookie")    //这里可以设置required = false意为不是必须存在的,如果不存在则得到的值就为null    //如果后面的参数类型是Cookie,则会获取Cookie对象并封装到变量中    public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,                         @CookieValue(value = "username" , required = false) Cookie cookie, HttpServletRequest request) {        //使用原生api获取cookies        Cookie[] cookies = request.getCookies();        for (Cookie cookie1 : cookies) {            System.out.println(cookie1);        }        System.out.println(cookie_value);        System.out.println("name:" + cookie.getName() + " value: " + cookie.getValue());        return "success";    }}
3.测试

image-20240314142646944

image-20240314142721839

2.细节说明
@CookieValue可以根据后面要封装的参数的类型来获取指定的值,如果后面的类型是Cookie类型则会获取一个Cookie对象并封装进入,如果是String类型则会获取Cookie的value来进行封装还可以通过Servlet原生api的request来获取所有的cookie@CookieValue中有属性required默认为true,意为必须存在,否则报错,如果设置为false,则如果获取不到则为null

6.@RequestBody 处理json请求,post请求体获取信息

1.代码实例
1.index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>基本注解</h1><hr/><form action="/requestBody" method="post">    <input type="text" name="username"><br>    <input type="text" name="password"><br>    <input type="submit" value="submit"></form></body></html>
2.ParameterController.java
package com.sun.springboot.controller;import org.springframework.web.bind.annotation.*;/** * @author 孙显圣 * @version 1.0 */@RestControllerpublic class ParameterController {    @PostMapping("requestBody")    public String getRequestBody(@RequestBody String requestBody) { //获取请求体        System.out.println(requestBody);        return "success";    }}
3.测试

image-20240314144140750

image-20240314144151845

7.@RequestAttribute 请求域获取信息

1.代码实例
1.RequestController.java
package com.sun.springboot.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestAttribute;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class RequestController {    @GetMapping("/login")    public String login(HttpServletRequest request) {        //在Request域中存放一些信息        request.setAttribute("name", "sun");        request.setAttribute("age", 13);        //调用视图解析器,请求转发到/ok        return "forward:/ok";    }    @ResponseBody    @GetMapping("/ok")    public String ok(@RequestAttribute(value = "name", required = false) String name) { //使用注解来获取请求域中的信息并封装到参数中        System.out.println("name: " + name);        return "success"; //返回json给浏览器    }}
2.配置视图解析器 application.yml
spring:  mvc:    view: #配置了视图解析器      suffix: .html #后缀      prefix: / #前缀,指的是根目录
3.测试

image-20240314150044278

image-20240314150037970

8.@SessionAttribute session域获取信息

1.代码实例
1.SessionController.java
    package com.sun.springboot.controller;        import org.springframework.stereotype.Controller;    import org.springframework.web.bind.annotation.GetMapping;    import org.springframework.web.bind.annotation.ResponseBody;    import org.springframework.web.bind.annotation.SessionAttribute;        import javax.servlet.http.HttpServletRequest;    /**     * @author 孙显圣     * @version 1.0     */    @Controller    public class SessionController {            @GetMapping("/login")        public String login(HttpServletRequest request) {            //在session域中设置信息            request.getSession().setAttribute("session", "session_value");                //调用视图解析器,请求转发到/ok            return "forward:/ok";        }            @ResponseBody        @GetMapping("/ok")        public String ok(@SessionAttribute(value = "session") String value) { //使用注解来获取session域中的信息并封装到参数中            System.out.println("session: " + value);            return "success"; //返回json给浏览器        }    }
2.配置视图解析器(同上)
3.测试

image-20240314150939704

image-20240314150945894

9.复杂参数

1.代码实例
1.RequestController.java
package com.sun.springboot.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestAttribute;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletResponse;import java.util.Map;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class RequestController {    @GetMapping("/login")    public String login(Map<String, Object> map, Model model, HttpServletResponse response) {        //给map封装信息        map.put("user", "sun");        map.put("job", "工程师");        //model封装信息        model.addAttribute("sal", 1000);        //结果最后都会封装到request域中        //调用视图解析器,请求转发到/ok        return "forward:/ok";    }    @ResponseBody    @GetMapping("/ok")    public String ok(@RequestAttribute("user") String user, @RequestAttribute("job") String job,                     @RequestAttribute("sal") Integer sal) { //使用注解来获取请求域中的信息并封装到参数中        System.out.println("user:" + user + " job:" + job + " sal:" +sal);        return "success"; //返回json给浏览器    }}
2.测试

image-20240314153229824

image-20240314153238100

2.HttpServletResponse给浏览器设置cookie
1.代码实例
package com.sun.springboot.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.CookieValue;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletResponse;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class RequestController {    @GetMapping("/login")    public String login(HttpServletResponse response) {        Cookie cookie = new Cookie("cookie_name", "cookie_value");        response.addCookie(cookie);        //调用视图解析器,重定向到/ok,不能使用请求转发,因为虽然响应给客户端cookie了,        // 但是由于是请求转发,第二个controller得到的是最开始的请求,那时候还没有cookie        return "redirect:/ok";    }    @ResponseBody    @GetMapping("/ok")    public String ok(@CookieValue("cookie_name") Cookie cookie) {        //获取cookie        System.out.println("key:" + cookie.getName() + " value:" + cookie.getValue());        return "success"; //返回json给浏览器    }}
2.测试

image-20240314155443305


点击全文阅读


本文链接:http://zhangshiyu.com/post/82484.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1