Spring通信传参的方法

Spring通信传参的方法

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.简单参数传递
      • 2.复合参数
      • 3.动态参数
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

接口传参的是一个非常常见的需求。

需求:

设计思路

在这里插入图片描述

实现思路分析

1.简单参数传递

postman 前后端联调典型接口联调总结 这篇写的Blog已经定义写了部分传参的方式,主要是基于静态的参数传递,主要包含的基本数据类型和对象数据类型的传参等。

Spring MVC支持动态参数的方式有很多种,以下是其中的一些常见方式:

  1. 路径参数(Path Parameters):可以在请求URL中使用占位符来表示参数,例如/users/{id},其中{id}就是一个路径参数。在控制器方法中可以使用@PathVariable注解来获取路径参数的值。

  2. 查询参数(Query Parameters):可以在请求URL中使用?符号后面的参数来表示查询参数,例如/users?id=1&name=John,其中idname就是查询参数。在控制器方法中可以使用@RequestParam注解来获取查询参数的值。

  3. 请求体参数(Request Body Parameters):可以通过HTTP请求的请求体中传递参数。在控制器方法中可以使用@RequestBody注解来获取请求体的参数,通常用于处理复杂的数据结构或对象。

  4. 表单参数(Form Parameters):可以通过HTTP请求的请求体中发送表单数据。在控制器方法中可以使用@RequestParam注解来获取表单参数的值,也可以使用@ModelAttribute注解来绑定表单数据到对象。

  5. 请求头参数(Request Header Parameters):可以通过HTTP请求的请求头中传递参数。在控制器方法中可以使用@RequestHeader注解来获取请求头参数的值。

这些方式可以根据实际需要灵活组合和使用,以满足不同的业务需求。

2.复合参数

复合参数是什么意思呢? 是各个数据类型是不同的,
一般的实现方案是定义一个类,添加对应的复合参数的集合去模拟参数传递即可

Spring MVC支持复合参数的方式有以下几种:

  1. 使用Java Bean作为参数:可以将多个参数封装到一个Java Bean中,然后将该Bean作为参数传递给Controller方法。在Controller方法中可以直接使用该Bean的属性来获取参数值。
public class User {
    private String name;
    private int age;
    // getters and setters
}

@RequestMapping("/user")
public String createUser(User user) {
    // 使用user对象的属性来获取参数值
    String name = user.getName();
    int age = user.getAge();
    // 其他逻辑
    return "success";
}
  1. 使用@RequestParam注解:可以在Controller方法的参数上使用@RequestParam注解来指定参数的名称,通过该注解可以将请求中的参数值赋给对应的方法参数。
@RequestMapping("/user")
public String createUser(@RequestParam("name") String name, @RequestParam("age") int age) {
    // 使用name和age参数
    // 其他逻辑
    return "success";
}
  1. 使用@PathVariable注解:如果请求的URL中包含参数,可以在Controller方法的参数上使用@PathVariable注解来获取URL中的参数值。
@RequestMapping("/user/{id}")
public String getUserById(@PathVariable("id") int id) {
    // 使用id参数
    // 其他逻辑
    return "success";
}

以上是Spring MVC中支持的几种复合参数的方式,根据具体的需求选择合适的方式来获取参数值。

3.动态参数

动态参数传递首先在JSE中我们都非常熟悉,采用的是动态参数的传递。

在Spring MVC中,动态参数通常是指在请求中传递的参数的值是动态变化的,而不是固定的。

在Spring MVC中,可以使用注解@PathVariable来获取URL中的动态参数。这个注解可以在控制器方法的参数上使用,并且指定参数的名称。例如:

@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") Long id) {
    // 根据id查询用户
    // ...
}

在这个例子中,{id}是URL中的动态参数,通过@PathVariable注解将其映射到方法的参数id上。

除了@PathVariable注解,还可以使用@RequestParam注解来获取动态参数。这个注解可以在控制器方法的参数上使用,并且指定参数的名称。例如:

@GetMapping("/users")
public String getUserByName(@RequestParam("name") String name) {
    // 根据name查询用户
    // ...
}

在这个例子中,name是请求参数中的动态参数,通过@RequestParam注解将其映射到方法的参数name上。

在Spring MVC中,还可以使用模糊匹配的方式来获取动态参数。可以使用*作为通配符,匹配任意字符。例如:

@GetMapping("/users/{id}/info")
public String getUserInfo(@PathVariable("id") Long id) {
    // 获取用户的详细信息
    // ...
}

在这个例子中,请求URL可以是/users/123/info,其中123就是动态参数,通过@PathVariable注解将其映射到方法的参数id上。

总之,Spring MVC提供了多种方式来获取请求中的动态参数,包括@PathVariable注解、@RequestParam注解和模糊匹配。根据具体的需求,可以选择合适的方式来处理动态参数。

如下说个一般性的解决方案如下:

一般地,在SpringMVC中采用的方案是可以先用Map传参试试,一般都是可以的,

最后是关于复杂数据结构模拟这块,其实就是在界面原型中,根据对应的结构性去模拟参数的形式,使用嵌套集合的方式来承载。
举个例子:
在这里插入图片描述

如上的界面动态增加的,那我我们就可以用list 来模拟,整体又是个List
所以我们的模拟方式如下:
List<List,Map> 这样的方式去承载 这种类型的数据。
所以本质上界面组织关系的模拟,最后Map来关联起来。

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐
1.https://blog.csdn.net/xiamaocheng/article/details/119442114

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

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

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

相关文章

typescript,eslint,prettier的引入

typescript 首先用npm安装typescript&#xff0c;cnpm i typescript 然后再tsc --init生成tsconfig.json配置文件&#xff0c;这个文件在package.json同级目录下 最后在tsconfig.json添加includes配置项&#xff0c;在该配置项中的目录下&#xff0c;所有的d.ts中的类型可以在…

[新版Hi3531DV200 性能强悍]

新版Hi3531DV200 性能强悍 Hi3531DV200是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;DVR产品应用开发的新一代专业SoC芯片。Hi3531DV200集成了ARM A53四核处理器和性能强大的神经网络推理引擎&#xff0c;支持多种智能算法应用。同时&#xff0c;Hi3531DV200还…

听GPT 讲Rust源代码--library/alloc

File: rust/library/alloc/benches/slice.rs 在Rust源代码中&#xff0c;rust/library/alloc/benches/slice.rs文件的作用是对&[T]类型&#xff08;切片类型&#xff09;进行性能基准测试。该文件包含了对切片类型的一系列操作的基准测试&#xff0c;例如切片迭代、切片排序…

面试高频算法专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量&#xff0c;不一定真的是指针。 快慢指针&#xff1a;一起向前走对撞指针、相向指针&#xff1a;从两头向中间走背向指针&#xff1a;从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 给你…

Spring Boot案例-员工分页查询

准备工作: 数据库的连接: #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://localhost:3306/tlias #连接数据库的用户名 spring.datasource.usernameroot #连接数据库的密码 spring.datasource.p…

SpringBoot 医药咨询系统

概述 智慧医药系统&#xff08;smart-medicine&#xff09;是一个基于 SpringBoot 开发的Web 项目。整体页面简约大气&#xff0c;增加了AI医生问诊功能&#xff0c;功能设计的较为简单。 开源地址 https://gitcode.net/NVG_Haru/Java_04 界面预览 功能介绍 游客功能介绍 …

Java多线程之线程池,volatile,悲观锁,乐观锁,并发工具类

目录 1.线程池核心原理1.创建线程池2.任务拒绝策略3.自定义线程池 2.线程池的大小1.最大并行数2.影响线程池大小的因素 3.多线程常见考点&#xff08;volatile&#xff0c;悲观锁&#xff0c;乐观锁&#xff09;4.并发工具类 1.线程池核心原理 ①创建一个空的池子 ②提交任务时…

c++写入数据到文件中

假设你想编写一个C程序&#xff1a;当你在调试控制台输入一些数据时&#xff0c;系统会自动存入到指定的文件中&#xff0c;该如何操作呢&#xff1f; 具体操作代码如下&#xff1a; #include<iostream> #include<string> #include<fstream> using namespa…

Spring Boot日志:从Logger到@Slf4j的探秘

写在前面 Hello大家好&#xff0c;今日是2024年的第一天&#xff0c;祝大家元旦快乐&#x1f389; 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用&#xff1f;三、日志怎么用&#xff1f;四、自定义日志打印&#x1f4ac; 常见日志框架说明4.1 在程序…

【教3妹学编程-算法题】一年中的第几天

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;经过了一周多的寒潮&#xff0c;天气总算暖和些了。 2哥&#xff…

VUE——IDEA 启动前端工程VS文件启动前端工程

IDEA 启动前端 目录 前言一、打开控制台二、输入npm install三、依赖下载完之后&#xff0c;输入npm run dev&#xff0c;运行前端项目1、IDEA启动前端工程2、文件目录启动前端工程 四、点击http://localhost:8080后续敬请期待 前言 启动已有的vue前端项目 一、打开控制台 选…

服务器硬件及RAID配置实战

目录 1、RAID的概念 2、RAID的实现方式 3、标准的RAID 3.1 RAID 0 3.2 RAID 1 3.3 RAID 5 3.4 RAID 10 4、建立硬件 RAID的过程步骤 1、进入RAID 1.1 重启服务器 1.2 进入RAID界面 1.3 在RAID界面切换目录 2、创建RAID 2.1 移动到RAID卡 2.2 按F2&#xff0c;选择…

NullByte

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-29 09:23 CST Nmap scan report for 192.168.1.1 Host is up (0.00038s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for …

Rust学习笔记006:代码组织

Crate 在Rust中&#xff0c;“crate” 是指 Rust 的代码单元&#xff0c;它可以包含一个或多个模块&#xff08;modules&#xff09;。Rust 的 crate 分类主要有两个方面&#xff1a;库&#xff08;Library Crates&#xff09;和二进制&#xff08;Binary Crates&#xff09;。…

UE4运用C++和框架开发坦克大战教程笔记(十三)(第40~42集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十三&#xff09;&#xff08;第40~42集&#xff09; 40. 多按键绑定41. 自动生成对象42. 资源模块数据结构测试自动生成对象按资源类型生成对象 40. 多按键绑定 上节课实现了按键绑定系统的 4 种基础绑定&#xff0c;这节课来…

【大数据面试知识点】Spark的DAGScheduler

Spark数据本地化是在哪个阶段计算首选位置的&#xff1f; 先看一下DAGScheduler的注释&#xff0c;可以看到DAGScheduler除了Stage和Task的划分外&#xff0c;还做了缓存的跟踪和首选运行位置的计算。 DAGScheduler注释&#xff1a; The high-level scheduling layer that i…

畅捷通的 Serverless 探索实践之路

作者&#xff1a;计缘&#xff0c;阿里云云原生架构师 畅捷通介绍 畅捷通是中国领先的小微企业财税及业务云服务提供商&#xff0c;成立于 2010 年。畅捷通在 2021 年中国小微企业云财税市场份额排名第一&#xff0c;在产品前瞻性及行业全覆盖方面领跑市场&#xff0c;位居中…

C:Huffman编码a

【问题描述】 给定一组字符的Huffman编码表&#xff08;从标准输入读取&#xff09;&#xff0c;以及一个用该编码表进行编码的Huffman编码文件&#xff08;存在当前目录下的in.txt中&#xff09;&#xff0c;编写程序实现对Huffman编码文件的解码&#xff0c;并按照后序遍历序…

【UE 截图】 自定义截图路径 文件名

目录 0 引言1 实践 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 截图】 自定义截图路径 文件名❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01;&#x1f388; 最…

zlib.decompressFile报错 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:方案1方案2此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了zlib.decompressFile报错 的问题。 问题: zlib.decompressFile报错,怎么解…