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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI人工智能大模型讲师叶梓《基于人工智能的内容生成(AIGC)理论与实践》培训提纲
  • OpenCV-Python(22):2D直方图
  • TensorFlow Hub模型
  • 拓展操作(三) jenkins迁移到另一个机器
  • 关键字:try-catch关键字
  • Ubuntu安装WordPress并使用Nginx作为Web服务器
  • Openwrt修改Dropbear ssh root密码
  • 数据流的中位数
  • 非常好用的ocr图片文字识别技术,识别图片中的文字
  • 【教学类-43-03】20231229 N宫格数独3.0(n=1、2、3、4、6、8、9) (ChatGPT AI对话大师生成 回溯算法)
  • 前端文件在虚拟机,后端在本机,两个如何通信
  • 2022年12月10日-2023年12月28日
  • Maven的使用和配置
  • 【java爬虫】使用element-plus进行个股详细数据分页展示
  • 记录:开始学习网络安全
  • Codepen 每日精选(2018-3-25)
  • express + mock 让前后台并行开发
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript DOM 10 - 滚动
  • Koa2 之文件上传下载
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • linux安装openssl、swoole等扩展的具体步骤
  • NSTimer学习笔记
  • SOFAMosn配置模型
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue学习第二天
  • 猴子数据域名防封接口降低小说被封的风险
  • 免费小说阅读小程序
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用common-codec进行md5加密
  • Python 之网络式编程
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # dbt source dbt source freshness命令详解
  • # 数仓建模:如何构建主题宽表模型?
  • #NOIP 2014# day.1 T2 联合权值
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (9)STL算法之逆转旋转
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (二)linux使用docker容器运行mysql
  • (五)网络优化与超参数选择--九五小庞
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转载)(官方)UE4--图像编程----着色器开发
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET企业级应用架构设计系列之结尾篇
  • /etc/motd and /etc/issue
  • @RequestMapping用法详解