@RequestParam、@PathVariable、@RequestBody、@RequestAttribute详解

news/2024/4/15 8:40:48

一、@RequestParam注解

作用:用于将指定的请求参数赋值给方法中的形参。
属性:
1)value:请求参数名(必须配置)
2)required:是否必需,默认为 true,即请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)
3)defaultValue:设置默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)

用法:

    @ResponseBody@GetMapping("/RequestParam")public Map test(@RequestParam("username") String username,@RequestParam("password") List<String > password){Map map=new HashMap();map.put("username",username);map.put("password",password);return map;}

注意:GET请求时,请求的参数是拼接在请求地址URL后面的
在这里插入图片描述
也可以通过一个@RequestParam注解与Map集合类型参数同时获取多个参数:

    @ResponseBody@GetMapping("/RequestParam")public Map test(@RequestParam Map<String,String> map1){Map map=new HashMap();map.put("test",map1);return map;}

在这里插入图片描述

二、@PathVariable注解

1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;post需要token来防止跨站请求漏洞。

@PathVariable注解在应用时,在@RequestMapping请求路径中,将需要传递的参数用花括号{}括起来,然后,通过@PathVariable(“参数名称”)获取URL中对应的参数值。如果@PathVariable标明参数名称,则参数名称必须和URL中的参数名称保持一致。
用法:

    @ResponseBody@GetMapping("/PathVariable/{name}/{age}")public Map test(@PathVariable("name") String name,@PathVariable("age") Integer age){Map map=new HashMap();map.put("name",name);map.put("age",age);return map;}

在这里插入图片描述
也可以使用一次注解获取多个参数:

    @ResponseBody@GetMapping("/PathVariable/{name}/{age}")public Map test(@PathVariable  Map<String,String> map3){Map map=new HashMap();map.put("params",map3);return map;}

三、@RequestBody注解

主要用来接收前端传递给后端的json字符串中的数据,也就是请求体中的数据,GET方式无请求体,所以使用**@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。**

在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

    @ResponseBody@PostMapping("/save")//获取请求体参数public String getRequestBody(@RequestBody String body){return body;}

四、@RequestAttribute注解:

获取请求域中所保存的属性的值。
用法:首先向浏览器发起goto请求并添加自定义值到请求域中,再转发到success请求去获取这些请求域中的值。

    @GetMapping("/goto")public String toSuccess(HttpServletRequest request){request.setAttribute("msg","成功了!");request.setAttribute("code",200);return "forward:/success";}//使用@RequestAttribute注解获取请求域中的值与//不使用注解获取请求域中的值@GetMapping("/success")public String success(@RequestAttribute("msg")String msg,@RequestAttribute("code") Integer code,HttpServletRequest request){Object msg1 = request.getAttribute("msg");Map map=new HashMap();map.put("msg",msg);map.put("code",code);System.out.println(map);System.out.println(msg1);return "success";}

在这里插入图片描述


http://www.ppmy.cn/news/1277391.html

相关文章

深度学习 Day19——P8YOLOv5-C3模块实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

WCF服务总结

前言 WCF,全称为Windows Communication Foundation,是一种用于构建分布式应用程序的微软框架。它提供了一种统一的编程模型,用于构建服务导向的应用程序,这些应用程序可以在本地或远程计算机上运行。WCF 支持多种传输协议和编码格式,并提供了高级安全性、可靠性和事务处理…

docker 安装及配置 nginx + tomcat(四):高可用

文章目录 1. 引言2. 高可用架构3. 实际步骤3.1 虚拟机新建系统3.2 安装 keepalived3.3 配置 keepalived3.4 启动 keepalived3.5 验证高可用3.5.1 查看当前效果3.5.2 模拟灾难 4 参考 1. 引言 前情提要&#xff1a; 《docker 安装及配置 nginx tomcat&#xff08;一&#xff0…

js 事件处理(addEventListener() 、removeEventListener())

可以直接在html标签中添加事件 例如&#xff1a; <div onclick"handleClick()">点击</div> 还可以为相关的节点元素添加一个特定的类名或id&#xff0c;以便于为该元素添加事件。可以通过on事件名称为元素添加事件监听。 var element document.getEle…

POST请求为什么会发送两次

在前端开发中&#xff0c;我们经常会遇到POST请求会发送两次的情况。这种问题可能会导致数据错误或其他意料之外的结果&#xff0c;让开发者感到困惑和不安。本文将深入探讨POST请求为何会发送两次的原因&#xff0c;并从以下几个方面进行解释&#xff1a;同源策略、简单请求、…

Linux学习(3)——基本命令-文件

1、cat&#xff1a;查看文件内容--上下合并文件 注意&#xff1a;cat只能查看普通的文本文件 如果文件内容过多会显示不全 选项效果-n显示行号包括空行-b跳过空白行编号&#xff1b;注意&#xff0c;在一行打了空格不算空白行&#xff0c;enter键直接跳过这一行才算-s将所有连续…

深入理解PyTorch中的Hook机制:特征可视化的重要工具与实践

文章目录 一、前言1. 特征可视化的重要性2. PyTorch中的hook机制简介 二、Hook函数概述1. Tensor级别的hook&#xff1a;register_hook()2. Module级别的hook 三、register_forward_hook()详解1. 功能与使用场景2. 示例代码与解释3. 在特征可视化中的具体应用 四、register_bac…

html行内元素和块级元素的区别?

HTML中的元素可以分为两种类型&#xff1a;行内元素&#xff08;inline&#xff09;和块级元素&#xff08;block&#xff09; 文章目录 什么是行内元素什么是块级元素元素转换行内元素转块级元素块级元素转行内元素 区别总结 什么是行内元素 HTML的行内元素&#xff08;inli…

NIO的实战教程(简单且高效)

1. 参考 建议按顺序阅读以下三篇文章 为什么NIO被称为同步非阻塞&#xff1f; Java IO 与 NIO&#xff1a;高效的输入输出操作探究 【Java.NIO】Selector&#xff0c;及SelectionKey 2. 实战 我们将模拟一个简单的HTTP服务器&#xff0c;它将响应客户端请求并返回一个固定的…

FPGA模块——以太网(1)MDIO读写

FPGA模块——以太网MDIO读写 MDIO接口介绍MDIO接口代码&#xff08;1&#xff09;MDIO接口驱动代码&#xff08;2&#xff09;使用MDIO驱动的代码 MDIO接口介绍 MDIO是串行管理接口。MAC 和 PHY 芯片有一个配置接口&#xff0c;即 MDIO 接口&#xff0c;可以配置 PHY 芯片的工…

【设计模式--结构型--代理模式】

设计模式--结构型--代理模式 代理模式概述结构静态代理案例&#xff1a;卖车票jdk动态代理cglib代理三种代理对比优缺点使用场景 代理模式 概述 由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时&#xff0c;访问对象不适合或者不能直接引用目标对象&#xff0…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜D

先看目录&#xff0c;除了2018年比较怪&#xff0c;其他最多2个D&#xff08;数学只有两个弟弟&#xff0c;一个大弟&#xff0c;一个小弟&#xff09; 文章目录 2023真题&#xff08;2023-16&#xff09;-D 2022真题&#xff08;2022-21&#xff09;-D-分析选项⇒是否等价⇒是…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表)

一、模型user对象>和数据库的字段关联 & 自动生成 【其中涉及删除表数据&#xff0c;一切又从零开始】 二、模型user对象>和数据库的字段关联 2.1在model文件夹下&#xff0c;新建 user对象 2.1.1 概念 大家可以想象我们现在的数据是存储在数据库里的&…

org.slf4j日志组件实现日志功能

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。 slf4j 是一个抽象程度更高的日志组件&#xff0c;本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现&#xff0c;而使用者只需要关心 slf4j 给出的API。 slf4j 仅仅是一个为Java程序提…

【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

解决问题 探索大语言模型解决推理问题的能力。从头训练或微调模型&#xff0c;需要创建大量的高质量含中间步骤的数据集&#xff0c;成本过大。 相关工作 1、使用中间步骤来解决推理问题 &#xff08;1&#xff09;使用自然语言通过一系列中间步骤解决数学应用题 &#xff0…

隐藏通信隧道技术——防御SSH隧道攻击的思路

隐藏通信隧道技术——防御SSH隧道攻击的思路 ​ 在内网中建立一个稳定、可靠的数据通道&#xff0c;对渗透测试工作来说具有重要的意义。应用层的隧道通信技术主要利用应用软件提供的端口来发送数据。常用的隧道协议有SSH、HTTP/HTTPS和DNS。 SSH协议 在一般情况下&#xff…

UE5 C++(六)— 枚举UENUM、结构体USTRUCT和补充属性说明符

文章目录 枚举&#xff08;ENUM&#xff09;第一种方式第二种方式 结构体&#xff08;USTRUCT&#xff09;补充属性说明符&#xff08;ExposeOnSoawn&#xff09;结构体创建数据表格 枚举&#xff08;ENUM&#xff09; 第一种方式 定义枚举 UENUM(BlueprintType) namespace …

Jenkins 构建环境指南

目录 Delete workspace before build starts&#xff08;常用&#xff09; Use secret text(s) or file(s) &#xff08;常用&#xff09; Add timestamps to the Console Output &#xff08;常用&#xff09; Inspect build log for published build scans Terminate a …

代码随想录算法训练营第五十七天| 647 回文子串 516 最长回文子序列

目录 647 回文子串 516 最长回文子序列 647 回文子串 在判断中dp[i][j]需要依赖dp[i 1][j - 1]所以第一次循环应该从s.size() - 1到0。 因为j一定比i大&#xff0c;所以第二层循环应该从i到s.size() class Solution { public:int countSubstrings(string s) {int res 0;vec…

java自定义校验参数类型范围

前言 像日常我们可能会进行一些枚举定义。一些状态的定义。这个时候你就需要去写一些。校验的方法和参数今天在小节&#xff0c;主要是讲如何自定义注解。来进行一个参数校验&#xff0c;非常的简单方便。 自定义注解 首先我们自定义一个圆类型的注解。标注这个注解的使用范…
最新文章