在 HTTP 请求中,我们可以选择不同的参数类型,如 param 类型和 JSON 类型。下面对这两种参数类型进行区别和对比:
-
参数编码:
param 类型的参数会被编码为 ASCII 码。例如,假设
name=john doe,则会被编码为name=john%20doe。而 JSON 类型的参数会被编码为 UTF-8。 -
参数顺序:
param 类型的参数没有顺序限制。但是,JSON 类型的参数是有序的。JSON 采用键值对的形式进行传递,其中键值对是有序排列的。
-
数据类型:
param 类型的参数仅支持字符串类型、数值类型和布尔类型等简单数据类型。而 JSON 类型的参数则支持更复杂的数据类型,如数组、对象等。
-
嵌套性:
param 类型的参数不支持嵌套。但是,JSON 类型的参数支持嵌套,可以传递更为复杂的数据结构。
-
可读性:
param 类型的参数格式比 JSON 类型的参数更加简单、易读。但是,JSON 格式在传递嵌套数据结构时更加清晰易懂。
总的来说,param 类型的参数适用于单一的数据传递,而 JSON 类型的参数则更适用于更复杂的数据结构传递。根据具体的业务需求,需要选择合适的参数类型。在实际开发中,常见的做法是:在 GET 请求中采用 param 类型的参数,而在 POST 请求中采用 JSON 类型的参数传递。
Param参数接收
1.直接接收
//直接接收
// /param/data?name=root&age=18
// 形参列表,填写对应名称的参数即可! 请求参数名 = 形参参数名即可!
// 1.名称相同 2.可以不传递 不报错
2.注解指定
//注解指定
//指定任意的请求参数名 要求必须传递数据 要求不必须传递 给予一个默认值
// /param/data1?account=root&page=1
// account必须传递 page可以不传递,如果不传递默认值就是1
/*
*
* @RequestParam -> 形参列表 指定请求参数名 或者是否必须传递 或者 非必须传递设置默认值
* 用法:@RequestParam(value = "指定请求参数名,如果形参名和请求参数名一致,可以省略!"
* required = false 前端是否必须传递此参数,你默认是必须,不传递的话出现400异常,
* defaultValue = "1" 当非必须传递 false时,可以设置默认值)
* */
3.特殊值
//特殊值
// 一名多值 key=1&key=2 直接使用集合接值即可
// /param/data2?hbs=吃&hbs=玩&hbs=学习
// 不加注解@RequestParam 将hbs对应的一个字符串直接赋值给集合! 类型异常!
// 加了注解,经理就会将集合 add加入对应的字符串
4.用实体对象接值
//使用实体对象接值 用户注册(用户的信息) -> 对应的实体类 -> 插入到数据库 表
// /param/data3?name=小胡&age=18 准备一个对应属性和get|set方法的实体类即可! -> 形参列表声明对象参数即可!
路径参数接收
路径传递参数是一种在 URL 路径中传递参数的方式。在 RESTful 的 Web 应用程序中,经常使用路径传递参数来表示资源的唯一标识符或更复杂的表示方式。而 Spring MVC 框架提供了 @PathVariable 注解来处理路径传递参数。
@PathVariable 注解允许将 URL 中的占位符映射到控制器方法中的参数。
例如,如果我们想将 /user/{id} 路径下的 {id} 映射到控制器方法的一个参数中,则可以使用 @PathVariable 注解来实现。
下面是一个使用 @PathVariable 注解处理路径传递参数的示例:
就是说在@RequestMapping中一定要给地址加上{}
json参数接收
前端传递 JSON 数据时,Spring MVC 框架可以使用 @RequestBody 注解来将 JSON 数据转换为 Java 对象。@RequestBody 注解表示当前方法参数的值应该从请求体中获取,并且需要指定 value 属性来指示请求体应该映射到哪个参数上。其使用方式和示例代码如下:
@EnableWebMvc注解效果等同于在 XML 配置中,可以使用 <mvc:annotation-driven> 元素!我们来解析<mvc:annotation-driven>对应的解析工作!
让我们来查看下<mvc:annotation-driven>具体的动作!
有了@EnableWebMvc之后,我们就可以不用再手动添加RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter这两个了
以及,我们在获取json参数的时候,我们需要用postman来进行接收和查看