SpringBoot 接收客户端提交数据/参数会使用到相关注解

news2024/10/7 18:23:15

目录

 

一.基本介绍

二.接收参数相关注解应用实例

1.需求:

2.应用实例演示

2.1演示@PathVariable 使用

2.2.演示@RequestHeader 使用

2.3演示@RequestParam 使用

2.4演示@CookieValue 使用

2.5演示@RequestBody 使用

2.6演示@RequestAttribute,SessionAttribute 使用

三.复杂参数

1.基本介绍

2.复杂参数应用实例

2.1说明 :

2.2代码演示

四.自定义对象参数-自动封装

1.基本介绍

2.自定义对象参数-应用实例

2.1需求说明 :

2.2代码实现

 

一.基本介绍

1. SpringBoot 接收客户端提交数据/参数会使用到相关注解
2. 详 解 @PathVariable 、 @RequestHeader 、 @ModelAttribute 、 @RequestParam 、
@MatrixVariable、@CookieValue、@RequestBody

二.接收参数相关注解应用实例

1.需求:

演示各种方式提交数据/参数给服务器,服务器如何使用注解接收

2.应用实例演示

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>hello, 海绵hong</h1>
基本注解:
<hr/>
<a href="/monster/200/jack">@PathVariable-路径变量 monster/200/jack</a><br/><br/>
<a href="/requestHeader">@RequestHeader-获取Http请求头 </a><br/><br/>
<a href="/hi?name=hong&fruit=apple&fruit=pear&id=300&address=深圳">@RequestParam-获取请求参数</a><br/><br/>
<a href="/cookie">@CookieValue-获取cookie值</a><br/><br/>
<a href="/login">@RequestAttribute-获取request域属性-</a>
<hr/>
<h1>测试@RequestBody获取数据: 获取POST请求体</h1>
<form action="/save" method="post">
    姓名: <input name="name"/> <br>
    年龄: <input name="age"/> <br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

需求: 演示各种方式提交数据/参数给服务器,服务器如何使用注解接收

2.1演示@PathVariable 使用

@RestController
public class ParameterController {
    /**
     * /monster/{id}/{name} 解读
     * 1. /monster/{id}/{name} 构成完整请求路径
     * 2. {id} {name} 就是占位变量
     * 3. @PathVariable("name"): 这里name 和{name} 命名保持一致
     * 4. String name_ 这里自定义,故意这样写下
     * 5. @PathVariable Map<String, String> map 把所有传递的值传入map
     * 6. 可以看下@PathVariable源码
     */
    @GetMapping("/monster/{id}/{name}")
    public String pathVariable(@PathVariable("id") Integer id,
                               @PathVariable("name") String name,
                               @PathVariable Map<String, String> map) {
        System.out.println("id-" + id);
        System.out.println("name-" + name);
        System.out.println("map-" + map);
        return "success";
    }

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

2.2.演示@RequestHeader 使用

 /**
     * @RequestHeader("Host") 获取http请求头的 host信息
     * @RequestHeader Map<String, String> header: 获取到http请求的所有信息
     *@RequestHeader("host") String host,将请求头中的变量值host映射到控制器参数host中
     */
    @GetMapping("/requestHeader")
    public String requestHeader(@RequestHeader("host") String host,
                                @RequestHeader Map<String, String> header,
                                @RequestHeader("accept") String accept) {
        System.out.println("host-" + host);
        System.out.println("header-" + header);
        System.out.println("accept-" + accept);
        return "success";
    }

@RequestHeader 是获取请求头中的数据,通过指定参数 value 的值来获取请求头中指定的参数值

2.3演示@RequestParam 使用


    /**
     * 解读
     * 如果我们希望将所有的请求参数的值都获取到,可以通过
     *
     * @param username
     * @param fruits
     * @param paras
     * @return
     * @RequestParam Map<String, String> paras 获取
     */
    @GetMapping("/hi")
    public String hi(@RequestParam(value = "name") String username,
                     @RequestParam("fruit") List<String> fruits,
                     @RequestParam Map<String, String> paras) {

        System.out.println("username-" + username);
        System.out.println("fruit-" + fruits);
        System.out.println("paras-" + paras);
        return "success";
    }

将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
 
value:参数名
 
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
 
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

2.4演示@CookieValue 使用

 /**
     * 因为我的浏览器目前没有cookie,我们可以自己设置cookie[技巧还是非常有用]
     * 如果要测试,可以先写一个方法,在浏览器创建对应的cookie
     * 说明 1. value = "cookie_key" 表示接收名字为 cookie_key的cookie
     * 2. 如果浏览器携带来对应的cookie , 那么 后面的参数是String ,则接收到的是对应对value
     * 3. 后面的参数是Cookie ,则接收到的是封装好的对应的cookie
     */
    @GetMapping("/cookie")
    public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,
                         HttpServletRequest request,
                         @CookieValue(value = "username", required = false) Cookie cookie) {
        System.out.println("cookie_value-" + cookie_value);
        if (cookie != null) {
            System.out.println("username-" + cookie.getName() + "-" + cookie.getValue());
        }
        System.out.println("-------------------------");
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie1 : cookies) {
            System.out.println(cookie1.getName() + "=>" + cookie1.getValue());
        }
        return "success";
    }

@CookieValue的作用

  用来获取Cookie中的值

@CookieValue参数

  1、value:参数名称

  2、required:是否必须,获取不到则为空

  3、defaultValue:默认值

2.5演示@RequestBody 使用

**
     * @RequestBody 是整体取出Post请求内容
     */
    @PostMapping("/save")
    public String postMethod(@RequestBody String content) {
        System.out.println("content-" + content);
        return "success";
    }

        @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

2.6演示@RequestAttribute,SessionAttribute 使用

@GetMapping("/login")
    public String login(HttpServletRequest request) {
        request.setAttribute("user", "hong~");//向request域中添加的数据
        request.getSession().setAttribute("website", "http://www.baidu.com"); //向session中添加数据
        return "forward:/ok";  //请求转发到  /ok
    }

    @GetMapping("/ok")
    @ResponseBody
    public String ok(
            HttpServletRequest request,
            @SessionAttribute(value = "website", required = false) String website,
            @RequestAttribute(value = "user", required = false) String username
    ) {
        //获取到request域中的数据
        System.out.println("username-" + username);
        System.out.println("通过servlet api 获取 username-" + request.getAttribute("user"));
        System.out.println("website-" + website);
        System.out.println("通过servlet api 获取 website-" + request.getSession().getAttribute("website"));
        return "success";
    }

获取HTTP的请求(request)对象属性值,用来传递给控制器的参数。

三.复杂参数

1.基本介绍

1. 在开发中,SpringBoot 在响应客户端请求时,也支持复杂参数
2. Map、Model、Errors/BindingResult、RedirectAttributes、ServletResponse、SessionStatus、
UriComponentsBuilder、ServletUriComponentsBuilder、HttpSession
3. Map、Model 数据会被放在 request 域, 底层 request.setAttribute()
4. RedirectAttributes 重定向携带数据

2.复杂参数应用实例

2.1说明 :

演示复杂参数的使用,重点: Map、Model、ServletResponse

2.2代码演示

//响应一个注册请求
    @GetMapping("/register")
    public String register(Map<String,Object> map,
                           Model model,
                           HttpServletResponse response) {
        //如果一个注册请求,会将注册数据封装到map或者model
        //map中的数据和model的数据,会被放入到request域中
        map.put("user","hspedu");
        map.put("job","java架构师");
        model.addAttribute("sal", 80000);
        //一会我们再测试response使用
        //我们演示创建cookie,并通过response 添加到浏览器/客户端
        Cookie cookie = new Cookie("email", "hspedu@sohu.com");
        response.addCookie(cookie);

        //请求转发
        return "forward:/registerOk";

    }

    @ResponseBody
    @GetMapping("/registerOk")
    public String registerOk(HttpServletRequest request) {

        System.out.println("user-" + request.getAttribute("user"));
        System.out.println("job-" + request.getAttribute("job"));
        System.out.println("sal-" + request.getAttribute("sal"));

        return "success";
    }

四.自定义对象参数-自动封装

1.基本介绍

1. 在开发中,SpringBoot 在响应客户端请求时,也支持自定义对象参数
2. 完成自动类型转换与格式化
3. 支持级联封装

2.自定义对象参数-应用实例

2.1需求说明 :

演示自定义对象参数使用,完成自动封装,类型转换

2.2代码实现

save.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加妖怪</title>
</head>
<body>
<h1>添加妖怪-坐骑[测试封装POJO;]</h1>
<form action="/savemonster" method="post">
    编号: <input name="id" value="100"><br/>
    姓名: <input name="name" value="牛魔王"/> <br/>
    年龄: <input name="age" value="500"/> <br/>
    婚否: <input name="isMarried" value="true"/> <br/>
    生日: <input name="birth" value="2000/11/11"/> <br/>
    <!-- 使用自定义转换器关联car, 字符串整体提交, 使用,号间隔  -->
    坐骑:<input name="car" value="避水金晶兽,666.6"><br/>
    <!--    坐骑名称:<input name="car.name" value="法拉利"/><br/>-->
    <!--    坐骑价格:<input name="car.price" value="9999.9"/>-->
    <input type="submit" value="保存"/>
</form>
</body>
</

Car.java 

@ToString
@Data
public class Car {
    private String name;
    private Double price;
}

 Monster.java 

@ToString
@Data
public class Monster {
    private Integer id;
    private String name;
    private Integer age;
    private Boolean isMarried;
    private Date birth;
    private Car car;
}
ParameterController.java 增加处理添加请求
@PostMapping("/savemonster")
public String saveMonster(Monster monster){
    System.out.println("monster= " + monster);
    return "success";
}

d2b3b58520114dfb8fa8138e22366d43.png 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言基础知识

目录 第一章 C语言概述 第二章 数据类型 运算符 表达式 第三章 简单的C程序设计 第四章 选择循环结构 第五章 数组 ​第六章 函数 第七章 编译预处理 第八章 指针 第九章 结构体与共用体 第一章 C语言概述 C语言的特点&#xff1a; 语言简洁、紧凑&#xff1b;使用…

安卓实训作孽之Linux命令手册

文章目录前言演示效果项目地址实现UI进度条实现读取文件获取路径进度条刷新总结前言 开局之前先吐槽一句&#xff0c;NC学校&#xff0c;以及NC老师&#xff0c;还要搞两个作品&#xff0c;上午上课下午实训真牛皮&#xff08;XS&#xff09;。好了废话不多说我们开始吧&#…

进阶自动化测试,你一定要知道的...

自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试框架一般可以分为两个层次&#xff0c;上层是管理整个自动化测试的开发&a…

[Spring]第二篇:IOC控制反转

简单的说就是,创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转. spring创建对象时,会读取配置文件,配置文件中主要配置接口和实现类的关系,每个接口对相应一个实现类,使用<bean>标签配置,<bean中的id可以随便…

微软S2C2F框架已被OpenSSF开源安全体系采用

近日&#xff0c;微软发布“安全供应链消费框架(Secure Supply Chain Consumption Framework&#xff0c;简称S2C2F)”1.1版本。该框架已被OpenSSF供应链完整性工作组采用。至此&#xff0c;OpenSSF开源软件评价相关的项目和指南已覆盖使用安全、关键性、基础设施安全、漏洞披露…

机器人导航必备的栅格地图数学模型及使用

机器人导航必备的栅格地图数学模型及使用占据栅格地图&#xff08;Occupancy Grid Map&#xff09;占用栅格地图基础概念占据栅格地图的数学模型ROS中使用OccupancyGrid占据栅格地图&#xff08;Occupancy Grid Map&#xff09; 占用栅格地图基础概念 上图就是一个ROS中的占据…

复旦大学-华盛顿大学EMBA项目位列全球第9,学术研究连续3年亚洲第一

2022年10月17日&#xff0c;英国《金融时报》&#xff08;FT&#xff09;发布全球EMBA项目排名&#xff0c;复旦大学-华盛顿大学EMBA项目位列全球第9位&#xff0c;学术研究连续3年亚洲第一&#xff0c;毕业生薪酬水平全球第六。    复旦大学-华盛顿大学EMBA项目是中国大陆…

JavaWeb三大组件之Filter

目录 1、Filter概述 2、Filter快速入门 2.1、开发步骤 2.2、代码演示 3、Filter执行流程​编辑 4、Filter拦截路径 5、过滤器链 5.1、概述 5.2、代码演示 5.3、问题 6、案例 6.1、需求 6.2、分析 6.3、代码实现 6.3.1、创建Filter 6.3.2、编写逻辑代码 6.3.3、…

SuperMap GIS管线数据处理QA

一、数据简介 传统的以二维平面展现网络数据的方式&#xff0c;在一定程度上限制了信息的表达&#xff0c;尤其是在复杂的空间位置关系上。三维网络是对现实中的网络的真实模拟&#xff0c;而非抽象模拟&#xff0c;因此能够全方位的展现信息。   例如&#xff0c;多层结构的…

python期末复习案例

一.条件判断 1. 判断一个数能否同时被3和7整除 and 两者都要为真 2.判断一个数能同时被3或者7整除 但不能同时被3和7整除 ★要使用not 3.输入年份&#xff0c;看是否为闰年 闰年条件&#xff1a;能被4整除但不能被100整除&#xff0c;或者能被四百整除 定义两个变量 保存一个…

leetcode 464. 我能赢吗 官方代码的一步步演进

这里写自定义目录标题题目示例解题优化1 记忆化搜索优化2&#xff1a;使用二进制代替choosable_list计算复杂性题目 在 “100 game” 这个游戏中&#xff0c;两名玩家轮流选择从 1 到 10 的任意整数&#xff0c;累计整数和&#xff0c;先使得累计整数和 达到或超过 100 的玩家…

Kafka - 09 Kafka副本 | Leader选举流程 | Follower故障 | Leader故障

文章目录1. 副本基本信息2. Leader选举流程3. Follower故障4. Leader故障1. 副本基本信息 1&#xff09;Kafka 副本作用&#xff1a;提高数据可靠性。 2&#xff09;Kafka 默认副本 1 个&#xff0c;生产环境一般配置为 2 个&#xff0c;保证数据可靠性&#xff1b;太多副本会…

深度学习网络模型——DenseNet模型详解与代码复现

深度学习网络模型——DenseNet模型详解与代码复现1、DenseNet概述2、DenseNet网络结构1、DenseNet中的DenseBlock模块2、DenseNet中的Transition模块3、DenseNet网络结构参数设置4、实验结果对比1、DenseNet概述 2、DenseNet网络结构 1、DenseNet中的DenseBlock模块 2、DenseNe…

内网穿透:针对小白的VSCode+云服务器+本地Ubuntu搭建GPU云服务器

前言 自己实验室的情况&#xff1a; 实验室拥有自己的GPU集群、工作站使用仅限于线下或者远程向日葵(不稳定、速度慢)拥有自己的廉价cpu轻量云服务器&#xff08;阿里云服务器(2G2*cpu)&#xff0c;大概40左右一年&#xff09; 平时出差、在宿舍等需要远程操作&#xff0c;向…

Python学习笔记-数字类型

目录 1. 数字类型 1.1 整型 1.2 浮点数 1.3 复数 1.4 布尔类型 2. 常用内置数值计算函数库 3. 随机数函数 本文记录python中的基本数字类型信息&#xff0c;以及一些其他的相关知识点。 1. 数字类型 python中用于标识数字或者数值的数据类型&#xff0c;主要有如下分类…

​鸽群卫星(Flock)​介绍

鸽群卫星&#xff08;Flock&#xff09;是美国Planet公司[1]研制的3U遥感立方体卫星星座&#xff0c;单颗卫星重约5kg&#xff0c;也被称为“鸽子”&#xff08;Dove&#xff09;。鸽群星座主要有两类轨道&#xff1a;空际空间站释放420km高、52度倾角轨道&#xff08;ISS&…

R语言基于决策树的银行信贷风险预警模型

引言 我国经济高速发展&#xff0c;个人信贷业务也随着快速发展&#xff0c;而个人信贷业务对提高内需&#xff0c;促进消费也有拉动作用。有正必有反&#xff0c;在个人信贷业务规模不断扩大的同时&#xff0c;信贷的违约等风险问题也日益突出&#xff0c;一定程度上制约着我…

力扣(LeetCode)115. 不同的子序列(C++)

动态规划 状态转移方程 f[i,j]{f[i−1,j]f[i−1,j]f[i−1,j−1]if s[i]t[j]f[i,j]\begin{cases} f[i-1,j]\\ f[i-1,j]f[i-1,j-1]&\text{if } s[i]t[j] \end{cases}f[i,j]{f[i−1,j]f[i−1,j]f[i−1,j−1]​if s[i]t[j]​ 无论选不选 s[i]s[i]s[i] &#xff0c; f[i][j]f[i…

解决报错:fatal: in unpopulated submodule *

目录 问题 解决 问题 今天想把两个 Git 工程合并成一个工程&#xff0c;尽管已经将其中一个工程的 .git 目录删除了&#xff0c;但是在合并提交时还是遇到了一个和子模块相关的报错&#xff0c;具体报错信息如下&#xff1a; fatal: in unpopulated submodule * 报错截图如下…

【iMessage苹果相册日历推位置推送】软件安装deviceToken是由APNs生成的

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…