当前位置: 首页 > news >正文

【JavaEE】SpringMVC 请求传参

目录

  • 一、请求
  • 二、传递单个参数
  • 三、传递多个参数
  • 四、传递对象
  • 五、@RequestParam注解 后端参数重命名(后端参数映射)
  • 六、传递数组
  • 七、传递集合,@RequestParam
  • 八、传递JSON数据
    • 8.1 JSON字符串和Java对象互转
      • 8.1.1 @Test注解
      • 8.1.2 Java对象转JSON
      • 8.1.3 JSON转Java对象
    • 8.2 传递JSON
      • 8.3 后端实现

一、请求

访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收.
传递参数, 咱们主要是使⽤浏览器和Postman来模拟.

二、传递单个参数

接收单个参数, 在 Spring MVC 中直接⽤⽅法中的参数就可以

@RestController
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/m1")public String m1(String request) {return  request;        }
}

使用浏览器访问:http://127.0.0.1:8080/user/m1?request=hello

使用Postman:

这两种都是键值对模型,其中的键要与方法的参数名一样。

注意事项:

  • 使⽤基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误, 类型不匹配时, 会报400错误.

三、传递多个参数

和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.

@RestController
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/m3")public String m3(String s1, int a) {return s1+"参数:"+a;}
}

使用浏览器访问:http://127.0.0.1:8080/user/m3?s1=你好&a=100

使用Postman:

注意事项:

  • 这两种都是键值对模型,其中的键要与方法的参数名一样。
  • 参数的位置是不影响后端获取参数的结果.
  • 基本类型来接收参数时,一样有上述问题。

四、传递对象

如果参数⽐较多时, ⽅法声明就需要有很多形参. 并且后续每次新增⼀个参数, 也需要修改⽅法声明. 我们不妨把这些参数封装为⼀个对象.

实例:

public class Person {private int id;private String name;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}
}@RestController
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/m4")public String m4(Person person){return person.toString();}
}    

注意事项:

  • 要传类中的成员名,不包含类对象名。
  • 由于类定义会给成员默认值,这里没有基本类型不传值报错问题。

五、@RequestParam注解 后端参数重命名(后端参数映射)

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致。
使用@RequestParam注解

实例:

@RestController
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/m5")public String m5(@RequestParam(value = "s")String string) {return string;}
}

注意事项:

  • 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀
    致, 才能进⾏参数绑定和赋值.
  • 使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数.
  • 要将参数变成非必传参数,需要将required = false

六、传递数组

Spring MVC 可以⾃动绑定数组参数的赋值

实例:

@RestController
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/m6")public String m6(String[] strings) {return Arrays.toString(strings);}
}

注意事项:

  • 使用Postman传参的时候,每个数组值通过逗号隔开。
  • 当需要传逗号作为值的时候,就需要传解码encode后的值。
  • 在使用浏览器URL访问时,也需要将非英文字母,全部encode。

七、传递集合,@RequestParam

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系

实例:

@RestController
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/m7")public String m7(@RequestParam ArrayList<String> strings) {return  strings.toString();}
}

注意事项:

  • 与传递数组同

八、传递JSON数据

JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.

JOSN语法:

  1. 数据在 键值对(Key-Value) 中
  2. 数据由逗号, 分隔
  3. 对象⽤ { } 表⽰
  4. 数组⽤ [ ] 表⽰
  5. 值可以为对象, 也可以为数组, 数组中可以包含多个对象
  6. 键key和值value之间通过冒号分割
  7. 键值对之间使用逗号分割

JSON优点

  1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
  2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
    传输
  3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
    速度
  4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
  5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼
    的安全性

8.1 JSON字符串和Java对象互转

我们在这介绍使用Jackson方式转换,因为这个是Spring中集成了的,不用引入依赖。
还有fastjson,gson。

8.1.1 @Test注解

在我们写测试代码时我们在test这个包下面写。
我们可以直接写main方法,也可以使用@Test这个方法注解在测试方法前面加上,这个注解作用相当于为方法开一个线程。所以可以写多个被@Test修饰的方法同时运行。

8.1.2 Java对象转JSON

使用类ObjectMapper下面的writeValueAsString方法。类对象必须要有无参构造函数

步骤:

  • 创建ObjectMapper对象
  • 创建对象
  • 直接调用writeValueAsString 将对象转换为JSON
 @Test
void testObjectToJson() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//创建对象Person person = new Person();person.setId(1);person.setName("zhangsan");person.setPassword("111");//对象转JSONString j = objectMapper.writeValueAsString(person);System.out.println(j);}

8.1.3 JSON转Java对象

使用类ObjectMapper下面的readValue方法。

  • 创建ObjectMapper对象
  • 创建json
  • 直接调用readValue将json转换为对象
@Testvoid testJsonToObject() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//创建jsonString s = "{\"id\":1,\"name\":\"zhangsan\",\"password\":\"111\"}";//JSON转对象Person person = objectMapper.readValue(s,Person.class);System.out.println(person);}

8.2 传递JSON

8.3 后端实现

我们只需要在方法参数上加上@RequestBody这个注解。

RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中

@RequestMapping(value ="/j1")public String j1(@RequestBody Person person) {return person.toString();}

postman传参

相关文章:

【JavaEE】SpringMVC 请求传参

目录 一、请求二、传递单个参数三、传递多个参数四、传递对象五、RequestParam注解 后端参数重命名&#xff08;后端参数映射&#xff09;六、传递数组七、传递集合&#xff0c;RequestParam八、传递JSON数据8.1 JSON字符串和Java对象互转8.1.1 Test注解8.1.2 Java对象转JSON8.…...

观察者模式说明(C语言版本)

观察者模式主要是为了实现一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己。下面使用C语言实现了一个具体的应用示例&#xff0c;有需要的可以参考…...

LeetCode 230.二叉搜索树中第K小的元素

题目&#xff1a;给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 思路&#xff1a; 代码&#xff1a; /*** Definition for a binary tree node.* public class Tre…...

11、集合框架

一、简介 Java集合框架位于java.util包中 Collection是Set和List的父类&#xff0c;Collections是工具类&#xff0c;提供了对集合进行排序、遍历等多种算法的实现。 ArrayList: 有序(放进去顺序和拿出来顺序一致)&#xff0c;可重复 HashSet: 无序(放进去顺序和拿出来顺序不…...

git常用指令详解

文章目录 Git 基本指令的使用Git 远程仓库Git的分支管理 Git 基本指令的使用 git init //初始化一个git仓库,在当前目录下生成.git文件夹&#xff0c;并且会默认生成一个master分支。git clone <url> [directory] //url为git仓库地址&#xff0c;directory为本地目录 gi…...

Debezium 报错:“The db history topic is missing” 的处理方法

Debezium 报错:“The db history topic is missing” 的处理方法 一、引言 在使用 Debezium 进行数据同步时,可能会遇到一个常见的错误:“The db history topic is missing”。这个错误表明 Debezium 无法找到或访问其数据库历史记录主题(db history topic),这通常是由…...

Grok 3.0 Beta 版大语言模型评测

2025年2月17日至18日&#xff0c;全球首富埃隆马斯克&#xff08;Elon Musk&#xff09;携手其人工智能公司xAI&#xff0c;在美国重磅发布了Grok 3.0 Beta版。这款被誉为“迄今为止世界上最智能的语言模型”的AI&#xff0c;不仅集成了先进的“DeepSearch”搜索功能&#xff0…...

AcWing 3691:有向树形态 ← 卡特兰数 + 复旦大学考研机试题

【题目来源】 https://www.acwing.com/problem/content/3694/ 【题目描述】 求 N 个相同结点能够组成的二叉树的个数。 【输入格式】 一个整数 N。 【输出格式】 输出能组成的二叉树的个数。 【数据范围】 1≤N≤20 【输入样例】 3 【输出样例】 5 【算法分析】 ● 卡特…...

便携式动平衡仪Qt应用层详细设计方案(基于Qt Widgets)

便携式动平衡仪Qt应用层详细设计方案&#xff08;基于Qt Widgets&#xff09; 版本&#xff1a;1.0 日期&#xff1a;2023年10月 一、系统概述 1.1 功能需求 开机流程&#xff1a;长按电源键启动&#xff0c;全屏显示商标动画&#xff08;快闪3~4次&#xff09;。主界面&…...

SpringBoot源码解析(十一):准备应用上下文

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

CSS 使用white-space属性换行

一、white-space属性的常见值 * 原本格式&#xff1a; 1、white-space:normal 默认值&#xff0c;空格和换行符会被忽略过滤掉&#xff1b;宽度不够时文本会自动换行 * 宽度足够时&#xff0c;normal 处理后的格式 * 宽度不够时&#xff0c; normal 处理后的格式 2、white-spa…...

论文笔记(七十二)Reward Centering(四)

Reward Centering&#xff08;四&#xff09; 文章概括摘要附录A 伪代码 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.09999…...

Matlab——图像保存导出成好看的.pdf格式文件

点击图像的右上角&#xff0c;点击第一个保存按钮键。...

官方文档学习TArray容器

一.TArray中的元素相等 1.重载一下 元素中的 运算符&#xff0c;有时需要重载排序。接下来&#xff0c;我们将id 作为判断结构体的标识。 定义结构体 USTRUCT() struct FXGEqualStructInfo {GENERATED_USTRUCT_BODY() public:FXGEqualStructInfo(){};FXGEqualStructInfo(in…...

unxi-进程间通信

1.进程间通信实现方式 【1】同一主机 linux下通信方式: a.传统的进程间通信方式 管道 --- 进行数据传输的"管道" 无名管道 有名管道 信号 --- b.system v 进程间通信 (posix 进程间通信) 共享内存 (进程间…...

微型分组加密算法TEA、XTEA、XXTEA

微型分组加密算法TEA、XTEA、XXTEA TEA&#xff08;Tiny Encryption Algorithm&#xff09;算法是一种分组加密算法&#xff0c;由剑桥大学计算机实验室的‌David Wheeler和‌Roger Needham于1994年发明。TEA、XTEA、XXTEA算法采用64位的明文分组和128位的密钥。它使用Feistel…...

conda 基本命令

1、查询当前所有的环境 conda env list 2、创建虚拟环境 conda create -n 环境名 [pythonpython版本号] 其中[pythonpython版本号]可以不写 conda create -n test python3.12 我们输入conda env list看到我们的环境创建成功了&#xff0c;但是发现他是创建在我们默认的C盘的…...

详解 为什么 tcp 会出现 粘包 拆包 问题

TCP 会出现 粘包 和 拆包 问题&#xff0c;主要是因为 TCP 是 面向字节流 的协议&#xff0c;它不关心应用层发送的数据是否有边界&#xff0c;也不会自动分割或合并数据包。由于 TCP 的流控制和传输机制&#xff0c;数据可能在传输过程中被拆分成多个小的 TCP 包&#xff0c;或…...

Linus的基本命令

以下是一些常见的 Linux 命令&#xff1a; 一、文件和目录操作&#xff1a; - ls&#xff1a;列出目录中的文件和子目录&#xff0c;常用参数有 -a &#xff08;显示所有文件&#xff0c;包括隐藏文件&#xff09;、 -l &#xff08;显示详细信息&#xff09;、 -h &#xff0…...

【Linux】缓冲区和文件系统

个人主页~ 缓冲区和文件系统 一、FILE结构1、fd2、缓冲区&#xff08;一&#xff09;有换行有return全部打印&#xff08;二&#xff09;无换行无return的C接口打印&#xff08;三&#xff09;无换行无return的系统调用接口打印&#xff08;四&#xff09;有换行无return的C接口…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...