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支持动态参数的方式有很多种,以下是其中的一些常见方式:
-
路径参数(Path Parameters):可以在请求URL中使用占位符来表示参数,例如
/users/{id}
,其中{id}
就是一个路径参数。在控制器方法中可以使用@PathVariable
注解来获取路径参数的值。 -
查询参数(Query Parameters):可以在请求URL中使用
?
符号后面的参数来表示查询参数,例如/users?id=1&name=John
,其中id
和name
就是查询参数。在控制器方法中可以使用@RequestParam
注解来获取查询参数的值。 -
请求体参数(Request Body Parameters):可以通过HTTP请求的请求体中传递参数。在控制器方法中可以使用
@RequestBody
注解来获取请求体的参数,通常用于处理复杂的数据结构或对象。 -
表单参数(Form Parameters):可以通过HTTP请求的请求体中发送表单数据。在控制器方法中可以使用
@RequestParam
注解来获取表单参数的值,也可以使用@ModelAttribute
注解来绑定表单数据到对象。 -
请求头参数(Request Header Parameters):可以通过HTTP请求的请求头中传递参数。在控制器方法中可以使用
@RequestHeader
注解来获取请求头参数的值。
这些方式可以根据实际需要灵活组合和使用,以满足不同的业务需求。
2.复合参数
复合参数是什么意思呢? 是各个数据类型是不同的,
一般的实现方案是定义一个类,添加对应的复合参数的集合去模拟参数传递即可
Spring MVC支持复合参数的方式有以下几种:
- 使用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";
}
- 使用@RequestParam注解:可以在Controller方法的参数上使用@RequestParam注解来指定参数的名称,通过该注解可以将请求中的参数值赋给对应的方法参数。
@RequestMapping("/user")
public String createUser(@RequestParam("name") String name, @RequestParam("age") int age) {
// 使用name和age参数
// 其他逻辑
return "success";
}
- 使用@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
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~