springboot系列九: 接收参数相关注解

文章目录

  • 基本介绍
  • 接收参数相关注解应用实例
      • @PathVariable
      • @RequestHeader
      • @RequestParam
      • @CookieValue
      • @RequestBody
      • @RequestAttribute
      • @SessionAttribute
  • 复杂参数
    • 基本介绍
    • 应用实例
  • 自定义对象参数-自动封装
    • 基本介绍
    • 应用实例

在这里插入图片描述

基本介绍

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

2.详细学习 @PathVariable, @RequestHeader, @ModelAttribute, @RequestParam, @CookieValue, @RequestBody

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

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

@PathVariable

1.创建src/main/resources/public/index.html
JavaWeb系列十: web工程路径专题

<h1>跟着老韩学springboot</h1>
基本注解:
<hr/>
<!--1. web工程路径知识:2. / 会解析成 http://localhost:80803. /monster/100/king => http://localhost:8080/monster/100/king4. 如果不带 /, 会以当前路径为基础拼接
/-->
<a href="/monster/100/king">@PathVariable-路径变量 monster/100/king</a><br/><br/>
</body>

2.创建src/main/java/com/zzw/springboot/controller/ParameterController.java
url占位符回顾

@RestController
public class ParameterController {/*** 1./monster/{id}/{name} 构成完整请求路径* 2.{id} {name} 就是占位变量* 3.@PathVariable("name"): 这里 name 和 {name} 命名保持一致* 4.String name_ 这里自定义, 这里韩老师故意这么写* 5.@PathVariable Map<String, String> map 把所有传递的值传入map* 6.可以看下@pathVariable源码* @return*/@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 + "\nname = " + name + "\nmap = " + map);return "success";}
}

3.测试 http://localhost:8088/monster/100/king

在这里插入图片描述
在这里插入图片描述

@RequestHeader

需求: 演示@RequestHeader使用.

1.修改src/main/resources/public/index.html

<a href="/requestHeader">@RequestHeader-获取http请求头</a><br/><br/>

2.修改ParameterController.java
JavaWeb系列八: WEB 开发通信协议(HTTP协议)

/*** 1. @RequestHeader("Cookie") 获取http请求头的 cookie信息* 2. @RequestHeader Map<String, String> header 获取到http请求的所有信息*/
@GetMapping("/requestHeader")
public String requestHeader(@RequestHeader("Host") String host,@RequestHeader Map<String, String> header) {System.out.println("host = " + host + "\nheader = " + header);return "success";
}

3.测试

在这里插入图片描述
在这里插入图片描述

@RequestParam

需求: 演示@RequestParam使用.

1.修改src/main/resources/public/index.html

<a href="/hi?name=赵志伟&fruit=apple&fruit=pear&address=上海&id=3">@RequestParam-获取请求参数</a><br/><br/>

2.修改ParameterController.java
SpringMVC系列五: SpringMVC映射请求数据

/*** 如果我们希望将所有的请求参数的值都获取到, 可以通过* @RequestParam Map<String, String> params*/
@GetMapping("/hi")
public String hi(@RequestParam(value = "name") String username,@RequestParam(value = "fruit") List<String> fruits,@RequestParam Map<String, String> params) {System.out.println("username = " + username + "\nfruits = "+ fruits + "\nparams = " + params);return "success";
}

3.测试

在这里插入图片描述
在这里插入图片描述

@CookieValue

需求: 演示@CookieValue使用.

1.修改src/main/resources/public/index.html

<a href="/cookie">@CookieValue-获取cookie值</a>

2.修改ParameterController.java
JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

/*** 因为我们的浏览器目前没有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") String cookie_value,@CookieValue(value = "username") Cookie cookie,HttpServletRequest request) {System.out.println("cookie_value = " + cookie_value+ "\nusername = " + cookie.getName() + "-" + cookie.getValue());Cookie[] cookies = request.getCookies();for (Cookie cookie1 : cookies) {System.out.println("cookie1 = " + cookie1.getName() + "-" + cookie1.getValue());}return "success";
}

3.测试
在这里插入图片描述
在这里插入图片描述

@RequestBody

需求: 演示@RequestBody使用.

1.修改src/main/resources/public/index.html

<h1>测试@RequestBody获取数据: 获取POST请求体</h1>
<form action="/save" method="post">名字: <input type="text" name="name"><br/>年龄: <input type="text" name="age"><br/><input type="submit" value="提交"/>
</form>

2.修改ParameterController.java
SpringMVC系列十: 中文乱码处理与JSON处理

/*** @RequestBody 是整体取出Post请求内容*/
@PostMapping("/save")
public String postMethod(@RequestBody String content) {System.out.println("content = " + content);//content = name=zzw&age=23return "sucess";
}

3.测试

在这里插入图片描述

content = name=zzw&age=123

@RequestAttribute

需求: 演示@RequestAttribute使用. 获取request域的属性.

1.修改src/main/resources/public/index.html

<a href="/login">@RequestAttribute-获取request域属性</a>

2.创建RequestController.java
SpringMVC系列十: 中文乱码处理与JSON处理

@Controller
public class RequestController {@RequestMapping("/login")public String login(HttpServletRequest request) {request.setAttribute("user", "赵志伟");//向request域中添加的数据return "forward:/ok";//请求转发到 /ok}@GetMapping("/ok")@ResponseBodypublic String ok(@RequestAttribute(value = "user", required = false) String username,HttpServletRequest request) {//获取到request域中的数据System.out.println("username--" + username);System.out.println("通过servlet api 获取 username-" + request.getAttribute("user"));return "success"; //返回字符串, 不用视图解析器}
}

3.测试…

@SessionAttribute

需求: 演示@SessionAttribute使用. 获取session域的属性.

1.修改src/main/resources/public/index.html

<a href="/login">@SessionAttribute-获取session域属性</a>

2.创建RequestController.java
JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

@Controller
public class RequestController {@RequestMapping("/login")public String login(HttpServletRequest request, HttpSession session) {request.setAttribute("user", "赵志伟");//向request域中添加的数据session.setAttribute("mobile", "黑莓");//向session域中添加的数据return "forward:/ok";//请求转发到 /ok}@GetMapping("/ok")@ResponseBodypublic String ok(@RequestAttribute(value = "user", required = false) String username,HttpServletRequest request,@SessionAttribute(value = "mobile", required = false) String mobile,HttpSession session) {//获取到request域中的数据System.out.println("username--" + username);System.out.println("通过servlet api 获取 username-" + request.getAttribute("user"));//获取session域中的数据System.out.println("mobile--" + mobile);System.out.println("通过HttpSession 获取 mobile-" + session.getAttribute("mobile"));return "success"; //返回字符串, 不用视图解析器}
}

3.测试…

复杂参数

基本介绍

1.在开发中, SpringBoot在相应客户端请求时, 也支持复杂参数

2.Map, Model, Errors/BindingResult, RedirectAttributes, ServletResponse, SessionStatus, UriComponentsBuilder, ServletUriComponentBuilder, HttpSession.

3.Map, Model,数据会被放在request域, 到时Debug一下.

4.RedirectAttribute 重定向携带数据

应用实例

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

●代码实现
1.修改src/main/java/com/zzw/springboot/controller/RequestController.java
SpringMVC系列六: 模型数据

//响应一个注册请求
@GetMapping("/register")
public String register(Map<String, Object> map,Model model,HttpServletRequest request) {//如果一个注册请求, 会将注册数据封装到map或者model//map中的数据和model中的数据, 会被放入到request域中map.put("user", "赵志伟");map.put("job", "java");model.addAttribute("sal", 6000);//一会我们再测试response使用//请求转发return "forward:/registerOk";
}@GetMapping("/registerOk")
@ResponseBody
public String registerOk(HttpServletRequest request,@RequestAttribute("user") String user,@RequestAttribute("job") String job,@RequestAttribute("sal") Double sal) {System.out.println("user=" + request.getAttribute("user"));System.out.println("job=" + job);System.out.println("sal=" + sal);return "success";
}

2.浏览器输入 http://localhost:8088/register , 打断点测试

SpringMVC系列十三: SpringMVC执行流程 - 源码分析

在这里插入图片描述

进入目标方法

在这里插入图片描述

剖析 request 对象

在这里插入图片描述

3.继续修改 register()方法
JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

//响应一个注册请求
@GetMapping("/register")
public String register(Map<String, Object> map,Model model,HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException {//如果一个注册请求, 会将注册数据封装到map或者model//map中的数据和model中的数据, 会被放入到request域中map.put("user", "赵志伟");map.put("job", "java");model.addAttribute("sal", 6000);//一会我们再测试response使用//演示创建cookie, 并通过response 添加到浏览器/客户端Cookie cookie = new Cookie("email", "978964140@qq.com");response.addCookie(cookie);//请求转发return "forward:/registerOk";
}

4.测试

在这里插入图片描述

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

基本介绍

1.在开发中, SpringBoot在响应客户端/浏览器请求时, 也支持自定义对象参数

2.完成自动类型转换与格式化

3.支持级联封装

应用实例

●需求说明:
演示自定义对象参数使用,完成自动封装,类型转换。

●代码实现
1.创建public/save.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>添加妖怪</title>
</head>
<body>
<form action="?" method="?">编号: <input name="" value=""><br/>姓名: <input name="" value=""><br/>年龄: <input name="" value=""><br/>婚否: <input name="" value=""><br/>生日: <input name="" value=""><br/>坐骑名称: <input name="" value=""><br/>坐骑价格: <input name="" value=""><br/><input type="submit" value="保存"/>
</form>
</body>
</html>

2.创建src/main/java/com/zzw/springboot/bean/Car.java

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

3.创建src/main/java/com/zzw/springboot/bean/Monster.java

@Data
public class Monster {private Integer id;private String name;private Integer age;private Boolean maritalStatus;private Date birthday;private Car car;
}

4.修改ParameterController.java

//处理添加monster的方法
@PostMapping("/saveMonster")
public String saveMonster(Monster monster) {System.out.println("monster = " + monster);return "success";
}

5.回填public/save.html

<form action="saveMonster" method="post">编号: <input name="id" value="100"><br/>姓名: <input name="name" value="张三"><br/>年龄: <input name="age" value="30"><br/>婚否: <input name="maritalStatus" value="未婚"><br/>生日: <input name="birthday" value="1994-01-01"><br/><input type="submit" value="保存"/>
</form>

6.自动封装需要用到自定义转换器. 接下来, 继续学习自定义转换器.


🔜 下一篇预告: [即将更新,敬请期待]


📚 目录导航 📚

  1. springboot系列一: springboot初步入门
  2. springboot系列二: sprintboot依赖管理
  3. springboot系列三: sprintboot自动配置
  4. springboot系列四: sprintboot容器功能
  5. springboot系列五: springboot底层机制实现 上
  6. springboot系列六: springboot底层机制实现 下
  7. springboot系列七: Lombok注解,Spring Initializr,yaml语法
  8. springboot系列八: springboot静态资源访问,Rest风格请求处理, 接收参数相关注解

💬 读者互动 💬
在学习 Spring Boot 静态资源访问和 Rest 风格请求处理的过程中,您有哪些新的发现或疑问?欢迎在评论区留言,让我们一起讨论吧!😊


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

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

相关文章

【小白也能看的懂】想要玩转AI大模型,这4招你得知道

前言 对于大部分人来说&#xff0c;能够灵活使用AI工具&#xff0c;并对自己每个常用的AI工具优劣势很清楚&#xff0c;就已经足够了。不过&#xff0c;毕竟AI发展实在太快&#xff0c;多了解一些相关的知识点&#xff0c;以全局的视角去看AI&#xff0c;可以避免管中窥豹&…

【错题集-编程题】买卖股票的最好时机(四)(动态规划)

力扣对应题目链接&#xff1a;188. 买卖股票的最佳时机 IV - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;买卖股票的最好时机(四)_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 1、状态表示 为了更加清晰的区分买入和卖出&#xff0c;我们换成有股…

【鸿蒙学习笔记】通过用户首选项实现数据持久化

官方文档&#xff1a;通过用户首选项实现数据持久化 目录标题 使用场景第1步&#xff1a;源码第2步&#xff1a;启动模拟器第3步&#xff1a;启动entry第6步&#xff1a;操作样例2 使用场景 Preferences会将该数据缓存在内存中&#xff0c;当用户读取的时候&#xff0c;能够快…

云WAF | 云waf基础知识详解

随着数字时代的到来&#xff0c;网络安全问题越来越突出&#xff0c; Web应用防火墙&#xff08;WAF&#xff09;是保障 Web应用安全的一道重要防线。在云计算环境下&#xff0c;云环路由云平台&#xff08;WAF&#xff09;的出现&#xff0c;其融合了 WAF的能力和云计算的灵活…

【Linux】IP地址与主机名

文章目录 1.IP地址2.特殊IP地址3.主机名4.域名解析 1.IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本 IPv4版本的地址格式是&#xff1a;a.b.c.d,其中abcd表示0~255的数字&#xff0c;如192.168.…

PS 2024【最新】中文白嫖版!,安装教程,图文步骤

文章目录 软件介绍软件下载安装步骤 软件介绍 Photoshop&#xff0c;简称“PS” Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地…

探索Facebook在人工智能领域的最新进展

在当今快速发展的科技领域中&#xff0c;人工智能&#xff08;AI&#xff09;作为一项关键技术&#xff0c;正在逐步改变着社交媒体的面貌。作为全球最大的社交平台之一&#xff0c;Facebook积极探索和应用人工智能&#xff0c;以提升用户体验、增强平台安全性并推动技术创新。…

Nodejs 第八十四章(ElasticSearch搜索)

ElasticSearch基本用法在之前的篇章介绍过了 这里不在过多阐述 模拟假数据 安装库 faker-js/faker 模拟假数据的一个库非常好用支持中文使用中文 locale: [zh_CN], 设置即可生成名字&#xff0c;邮箱&#xff0c;手机号&#xff0c;id&#xff0c;年龄&#xff0c;性别生成完成…

ATT 和 GATT:数据表示和交换

背景介绍 BLE的通信和以太网&#xff0c;wifi有个重大的不同是&#xff1a;BLE通信的设备往往有特定的功能。且这个功能不会在运行中发生变化。 因此蓝牙设备通信的时候&#xff0c;只能访问预先定义好的&#xff08;也就是配置文件profile&#xff09;的功能。 那profile里写…

批量制作word表格

问题背景 将excel表中的成绩内容制作为成绩单&#xff0c;每页对应一个学员的成绩&#xff0c;方便打印 代码实现 ## 导入包 import pandas as pd from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING# 读取 Excel 内容 df pd.read_e…

IP 地址:优化网络游戏

IP地址和网络游戏 在现代网络游戏中&#xff0c;IP地址不仅用于服务器分配&#xff0c;还能针对性进行玩家匹配与优化网络延迟。本文将探讨IP地址在网络游戏中的具体应用。 *服务器分配* 全球服务器分布&#xff1a; 网络游戏需要在全球范围内提供快速、稳定的连接&#xff…

libcoap3对接华为云平台

文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台&#xff0c;本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先&#xff0c;你需要在华为云平台上创建…

文华财经盘立方博易大师boll布林带指标公式源码

TT:TIME>850&&TIME<1150; MID:MA(CLOSE,26);//求N个周期的收盘价均线&#xff0c;称为布林通道中轨 TMP2:STD(CLOSE,26);//求M个周期内的收盘价的标准差 TOP:MID2*TMP2;//布林通道上轨 BOTTOM:MID-2*TMP2;//布林通道下轨 A:EVERY(ISDOWN,2)&&TT&&…

【鸿蒙学习笔记】使用axios进行HTTP数据请求

官方文档&#xff1a;网络管理开发概述 目录标题 访问淘宝公开接口&#xff08;测试数据&#xff09;第1步&#xff1a;module.json5 配置网络授权第2步&#xff1a;下载axios第3步&#xff1a;源码第4步&#xff1a;启动模拟器第5步&#xff1a;启动entry第6步&#xff1a;操…

论文AI痕迹过重怎么办?AI降痕工具来帮忙

如何有效利用AI工具提高工作效率&#xff1f;探索这5款顶级AI写作工具 不知道大家有没有发现&#xff0c;随着人工智能技术的快速发展&#xff0c;AI工具正逐渐渗透到我们日常生活的各个方面&#xff0c;极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图&…

排序(一)——冒泡排序、直接插入排序、希尔排序(BubbleSOrt,InsertSort,ShellSort)

欢迎来到繁星的CSDN&#xff0c;本期的内容主要包括冒泡排序(BubbleSort&#xff09;&#xff0c;直接插入排序(InsertSort)&#xff0c;以及插入排序进阶版希尔排序&#xff08;ShellSort&#xff09;。 废话不多说&#xff0c;直接上正题&#xff01; 一、冒泡排序 冒泡排序…

制作微信商城的步骤是什么

在当今这个数字化时代&#xff0c;微信已成为人们日常生活中不可或缺的一部分。随着微信生态的日益完善&#xff0c;微信商城成为了众多企业和商家拓展线上业务、触达潜在客户的重要渠道。那么&#xff0c;如何制作一个高效、专业的微信商城呢&#xff1f;本文将为您详细解析制…

做突破交易时,需要注意的进场细节有哪些?

突破交易揭示了市场未来的走向。 在这种情况下&#xff0c;面对市场时我们应该如何入场操作呢&#xff1f;接下来&#xff0c;让我们来细化一下实施的具体步骤。 01. 在交易中&#xff0c;周期的考量比价格突破更为关键。 当价格突破发生时&#xff0c;市场的平静被打破&#x…

生物素化的曼陀罗凝集素;Datura Stramonium Lectin

一、基本信息 中文名称&#xff1a;生物素化的曼陀罗凝集素 英文名称&#xff1a;Datura Stramonium Lectin (Biotinylated) 常用名&#xff1a;曼陀罗凝集素&#xff0c;生物素化 CAS号&#xff1a;N/A&#xff08;因不同制造商和产品而异&#xff0c;且可能未公开&#xff09…

MySQL黑马教学对应视屏笔记分享之聚合函数,以及排序语句的讲解笔记

聚合函数 注意&#xff1a;null值不参与聚合函数的计算。 分组查询 2.where与having的区别 执行时机不同&#xff1a;where是在分组之前进行过滤&#xff0c;不满足where条件&#xff0c;不参与分组&#xff1b;而having是分组之后对结果进行过滤。判断条件不同&#xff1a;w…