通过 前文 了解了 Spring MVC 如何匹配请求,接下来就应该思考如何获取请求中的参数,只有得到了请求中的参数才能完成与客户端之间的交互。通常请求的传参方式有查询参数、请求体、URL 路径参数、请求头、Cookie。
HTTP 协议的传参方式
查询参数(Query Parameters)
使用 Hoppscotch 发起请求进行测试

方法形参名称和 URL 查询字符串参数名称相同的情形
如果是 URL 参数名和方法形参名称不一致,可以在方法形参上使用 @RequestParam 注解,@RequestParam 有四个参数:
- name/value:URL 中的参数名
- required:参数是否必传(默认为 true),如果为 true 并且 URL 中没有此参数,就会抛出异常
- defaultValue:参数不存在时的默认值
如果有多个相同的参数名,方法会获取到哪个参数呢

结果是以逗号分隔的多个值

如果 URL 查询参数比较多,这时把参数封装成一个实体类就比较合适了,但此时就不能使用 @RequestParam 注解了。


还可以把查询参数封装进多个对象中


请求体参数(Request Body)
从请求体中获取数据,需要使用 @RequestBody 注解,注解有一个 required 参数,需要注意的是,一个方法只能有一个 @RequestBody 注解,但可以和@RequestParam 注解同时使用。
在 Hoppscotch 中配置 Body 参数


URL 路径参数(Path Parameters)
路径参数就是把参数放在路径中,通过 @PathVariable 注解来获取路径参数。

请求头参数(Request Headers)
客户端发起请求的时候,可以把数据放在 header 中,可以通过 @RequestHeader 获取 header 中的数据,@RequestHeader 有四个参数:
- name/value:URL 中的参数名
- required:参数是否必传(默认为 true),如果为 true 并且 URL 中没有此参数,就会抛出异常
- defaultValue:参数不存在时的默认值


Cookie 参数
服务端可以为客户端设置 Cookie,客户端也可以设置 Cookie,客户端发起请求的时候会自动携带上 Cookie。通过 @CookieValue 注解获取 Cookie 中的数据,@CookieValue 有四个参数:
- name/value:URL 中的参数名
- required:参数是否必传(默认为 true),如果为 true 并且 URL 中没有此参数,就会抛出异常
- defaultValue:参数不存在时的默认值
设置 Cookie

发起请求

Spring Web MVC 请求参数获取方法
1254

被折叠的 条评论
为什么被折叠?



