Spring spring

Spring中文网站 > Spring Security > Spring MVC如何获取请求参数 Spring MVC如何接收Json数据
Spring MVC如何获取请求参数 Spring MVC如何接收Json数据
发布时间:2026/09/20 16:38:37

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

我们用Spring MVC写接口的时候,经常要获取请求参数,前端传过来的数据形式不止一种,有拼在URL后面的查询参数,也有通过表单提交的,还有越来越普遍的JSON格式请求体,不同的传参方式在后端的接收写法也不一样。很多刚接触Spring MVC的用户容易在这里踩坑,前端数据发过来了,但是拿到的却是null,排查半天才发现是接收方式用错了。下面给大家介绍一下Spring MVC如何获取请求参数,Spring MVC如何接收Json数据的相关内容。

一、Spring MVC如何获取请求参数

Spring MVC获取请求参数的方式有多种,每种写法都有不同的使用场景,我们实际开发的时候根据前端传参的方式来选就行。常用的是@RequestParam注解来接收URL查询参数或者表单字段。比如说请求地址是/user?id=1&name=张三,我们只需要在方法参数上加@RequestParam("id")就能直接拿到对应的值。

使用@RequestParam注解
图1:使用@RequestParam注解

如果参数名和方法里的变量名一致,@RequestParam甚至可以省略不写,Spring也会帮我们自动按名称匹配。

这个注解还有一个required属性,默认是true,意味着这个参数必须传,前端如果没传就会报错,改成false就变成可选参数,配合defaultValue可以给它设一个默认值,避免业务逻辑里频繁判空。

required属性
图2:required属性

如果参数比较多,挨个写显得繁琐,我们建议直接用一个实体类来接收,把请求参数的字段名和实体类的属性名对应上,方法参数里直接声明这个类,Spring会自动把值填进去,不需要加任何注解,这种写法在表单提交场景下用得比较多,干净整洁,参数一多优势很明显。

封装实体类,用实体类来接收
图3:封装实体类,用实体类来接收

如果要接收路径参数,可以用@PathVariable,地址写成/user/{id}这样的形式,方法参数上加@PathVariable("id"),请求进来的时候Spring会自动把路径里对应位置的值提取出来。

接收路径参数
图4:接收路径参数

二、Spring MVC如何接收json数据

前端用JSON格式传数据已经是现在主流玩法了,我们会发现在前后端分离的项目里,接口请求体基本上都是JSON,Spring MVC接收JSON数据的核心注解是@RequestBody。

基本写法是在方法参数前面加上@RequestBody,然后声明一个对应的实体类,请求进来之后Spring会自动把请求体里的JSON字符串反序列化成这个实体类的对象,字段名对应上就能直接拿到值。比如前端传来的JSON是{"name":"张三","age":25},后端声明一个有name和age属性的User类,加上@RequestBody User user,拿到的对象里值就已经填好了。

使用@RequestBody
图5:使用@RequestBody

需要注意的是我们项目里得有JSON解析的依赖支持,Spring Boot项目引入了spring-boot-starter-web之后,Jackson库已经默认包含在里面,不需要额外配置,直接就能用,如果有些小伙伴不是Spring Boot项目,需要手动在pom.xml里加jackson-databind的依赖,否则@RequestBody拿到的会是null或者直接报错。

引入依赖
图6:引入依赖

还有个要注意的,我们前端发在请求的时候Content-Type必须设置成application/json,这个头信息告诉服务端请求体是JSON格式,这样Spring才会用对应的消息转换器来处理。如果Content-Type写的是application/x-www-form-urlencoded,@RequestBody就解析不了,这是很多人踩过的坑。

设置头信息
图7:设置头信息

如果不想专门建一个实体类,也可以用Map来接收,方法参数写成@RequestBody Map,JSON里的每个字段会以键值对的形式存进Map里,这种方式适合字段不固定或者临时调试的场景,但如果是长期维护的接口还是建议用实体类。

以上就是Spring MVC如何获取请求参数,Spring MVC如何接收Json数据的全部内容了。参数接收的方式有很多,URL查询参数和表单字段用@RequestParam或者实体类接收,如果是路径参数用@PathVariable,JSON请求体就用@RequestBody,使用的时候注意使用场景。我们在接收JSON的时候注意看下项目里是否有Jackson依赖,然后就是前端请求头的Content-Type必须是application/json,这两个条件缺一不可。

读者也访问过这里:
180 1563 6924