SpringBoot(接受参数相关注解)

文章目录

    • 1.基本介绍
    • 2.@PathVariable 路径参数获取信息
        • 1.代码实例
          • 1.index.html
          • 2.ParameterController.java
          • 3.测试
        • 2.细节说明
    • 3.@RequestHeader 请求头获取信息
        • 1.代码实例
          • 1.index.html
          • 2.ParameterController.java
          • 3.测试
        • 2.细节说明
    • 4.@RequestParameter 请求获取参数信息
        • 1.代码实例
          • 1.index.html
          • 2.ParameterController.java
          • 3.测试
        • 2.细节说明
    • 5.@CookieValue cookie获取值
        • 1.代码实例
          • 1.index.html
          • 2.ParameterController.java
          • 3.测试
        • 2.细节说明
    • 6.@RequestBody 处理json请求,post请求体获取信息
        • 1.代码实例
          • 1.index.html
          • 2.ParameterController.java
          • 3.测试
    • 7.@RequestAttribute 请求域获取信息
        • 1.代码实例
          • 1.RequestController.java
          • 2.配置视图解析器 application.yml
          • 3.测试
    • 8.@SessionAttribute session域获取信息
        • 1.代码实例
          • 1.SessionController.java
          • 2.配置视图解析器(同上)
          • 3.测试
    • 9.复杂参数
        • 1.代码实例
          • 1.RequestController.java
          • 2.测试
        • 2.HttpServletResponse给浏览器设置cookie
          • 1.代码实例
          • 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
 */
@RestController
public 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
 */
@RestController
public 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
 */
@RestController
public 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
 */
@RestController
public 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
 */
@RestController
public 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
 */
@Controller
public 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
 */
@Controller
public 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
 */
@Controller
public 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://www.mfbz.cn/a/456465.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PMP成绩判定标准是什么?

2024年3月10日的PMP考试已经结束&#xff0c;不知道大家考得怎么样&#xff0c;对于考试难度有没有值得分享或者吐槽的&#xff1f;可以发出来大家交流一下~ 一、3月PMP考试成绩什么时候出&#xff1f; 按照往期考试成绩发布时间&#xff0c;基本在考后6-8周会出成绩&#xf…

扩展资料主机名到IP地址的有两种方式:DNS

中国联通的DNS地址有两种。 主 DNS 为“210.21.4.130”&#xff0c;备用 DNS 为“221.5.88.88”。 每个 IP 地址可以有一个主机名。 主机名由一串或多串字符组成。 用小数点分隔字符串。 对于中国联通宽带用户&#xff0c;主DNS设置为&#xff1a;210.21.4.130&#xff0c;备用…

最好的五款骨传导耳机推荐,揭秘几大骨传导耳机选购技巧

骨传导耳机以健康听音的优势&#xff0c;近年来迅速赢得了市场的青睐&#xff0c;并成为蓝牙耳机领域的热门选择。随着其受欢迎程度的提升&#xff0c;市场上也出现了一些质量很差的产品&#xff0c;这些产品音质不佳、佩戴不舒适&#xff0c;甚至可能对用户的听力造成潜在风险…

Python实现BOA蝴蝶优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

权限管理系统-0.4.1

5.4 权限管理前端开发 5.4.1 src/components 新建ParentView文件夹&#xff0c;并在文件夹中新建index.vue文件。 并在index.vue中加入以下内容&#xff1a; <template><router-view /> </template>5.4.2 layout/components/Sidebar/index.vue routes() …

潜水耳机哪个牌子好?潜水党必看的游泳耳机专业性能详解!

在游泳、潜水等水上活动中&#xff0c;一个好的耳机可以让你更加享受水中的乐趣。而随着科技的不断发展&#xff0c;市面上涌现了越来越多的游泳耳机品牌和型号&#xff0c;让人眼花缭乱。 &#xff08;以下是之前测试过的游泳耳机&#xff1a;&#xff09; 那么&#xff0c;潜…

从零开始搭建医保购药APP:技术选择与开发流程

医保购药APP作为一种创新的医疗服务工具&#xff0c;为用户提供了便捷的医保购药流程&#xff0c;同时也为医疗机构提供了更高效的管理和服务方式。今天小编将为大家讲解如何从零开始搭建一款医保购药APP&#xff0c;包括技术选择和开发流程。 一、技术选择 在搭建医保购药APP…

python面向对象的三大特性:封装,继承,多态

1、面向对象有哪些特性 三种&#xff1a;封装性、继承性、多态性 2、Python中的封装 在Python代码中&#xff0c;封装有两层含义&#xff1a; ① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 ② 封装可以为属性和方法添加为私有权限&#xff0c;不能直…

【C++练级之路】【Lv.13】多态(你真的了解虚函数和虚函数表吗?)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、虚函数与重写1.1 虚函数1.2 虚函数的重写1.3 重写的特例1.4 final和override&#xff08;C11&#xff09;1.…

【ROS+amcl+Movebase】多机器人导航

学过单机器人在已知地图中的导航后&#xff0c;想到如果有多个机器人在同一地图如何导航&#xff0c;于是在网上学习了下&#xff0c;主流方案即在单机器人导航的基础上引入命名空间。 参考文章1 参考文章2 参考文章3 一、实验环境 Ubuntu1804&#xff08;虚拟机&#xff09;…

VSCode+python单步调试库代码

VSCodepython单步调试库代码 随着VSCode版本迭代更新&#xff0c;在最新的1.87.x中&#xff0c;使用Python Debugger扩展进行调试时&#xff0c;扩展的justMyCode默认属性为true&#xff0c;不会进入库中的代码。这对debug而言不太方便&#xff0c;因此需要手动设置一下&#…

在vite(vue)项目中使用mockjs

在vite&#xff08;vue&#xff09;项目中使用mockjs 在开发环境使用 1、首先创建vite项目 yarn create vite选择vue&#xff0c;选择默认的js版本 2、进入项目文件夹中执行yarn安装依赖 yarn add axios mockjs vite-plugin-mock3、安装axios、mockjs及插件 yarn add axio…

【方法封装】时间格式化输出,获取请求设备和IP

目录 时间类 1.1 获取当前时间&#xff0c;以特定格式化形式输出 1.2 自定义时间&#xff0c;以特定格式化输出 1.3 获取当前时间&#xff0c;自定义格式化 1.4 自定义时间&#xff0c;自定义格式化 设备类 根据请求头信息&#xff0c;获取用户发起请求的设备 请求IP类 …

vue3中的文字滚动播报

vue3中的文字滚动播报 之前UI框架一直使用的elementPlus&#xff0c;有个需求&#xff0c;需要在页面上写个滚动播放新闻的功能&#xff0c;发现UI框架居然没有这个组件。花了一下午&#xff0c;在ChatGPT的帮助下&#xff0c;总算写成功了&#xff0c;先看最终展示效果 web页…

Python打印输出Linux中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明&#xff1a; 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表&#xff0c;并统计命令的执行次数。统计时&#xff0c;只统计命令的名称&#xff0c;以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

npm yarn 一起使用报错

项目记录&#xff0c;具有独特性&#xff0c;仅供参考 项目好好的运行&#xff0c;前一天装个测试工具包&#xff0c; 突然就不行了&#xff0c;卸载重装也不行&#xff0c;所有的项目都安装失败&#xff0c;新起一个项目也不行&#xff0c;有时候某个单独安装一个包可以&…

【爬虫】requests.post请求中的data和json使用区别

请求体是键值对形式&#xff08;无花括号&#xff09;&#xff0c;请求时需要使用data参数处理。 代码&#xff1a; data {...} ret requests.post(url, headersheaders, datadata)请求体是字典形式&#xff08;有花括号&#xff09;&#xff0c;请求时需要使用json参数处理。…

GPT-5:人工智能的下一个前沿即将到来

当我们站在人工智能新时代的门槛上时&#xff0c;GPT-5即将到来的呼声愈发高涨且迫切。作为革命性的GPT-3的继任者&#xff0c;GPT-5承诺将在人工智能领域迈出量子跃迁式的进步&#xff0c;其能力可能重新定义我们与技术的互动方式。 通往GPT-5之路 通往GPT-5的旅程已经标记着…

Markdown编辑器VNote突然让我不知所措 编辑区变小问题

环境&#xff1a;macOS VNote 3.16.0 一直喜欢用VNote因为它的编辑和显示的切换分离及右边的大纲&#xff08;菜单&#xff09;比CSDN在上方的大纲好用很多&#xff01; 但今天在编辑时不知碰到了什么键&#xff0c;编辑界面变成了下面的样子 按了回撤也没有反应&#xff0c…

mineadmin 快速安装部署(docker环境)

前提条件&#xff1a;已安装docker 一、下载dnmp环境包 github地址&#xff1a;https://github.com/tomorrow-sky/dnmp gitee地址&#xff1a; https://gitee.com/chenjianchuan/dnmp 二、看一下dnmp包目录结构 三、打开docker-compose.yml 文件&#xff0c;将不需要…
最新文章