首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Spring Web MVC 入门】一篇搞懂 Spring MVC:注解用法、Postman 测试、参数传递全解析

【Spring Web MVC 入门】一篇搞懂 Spring MVC:注解用法、Postman 测试、参数传递全解析

作者头像
独断万古他化
发布2026-01-15 13:13:58
发布2026-01-15 13:13:58
560
举报
文章被收录于专栏:Java 攻略Java 攻略

一、Spring Web MVC 定义

Spring Web MAC 通常又被称为 Spring MVC,是一个Web框架。MVC是软件工程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。

  • View(视图)指在应用程序中专门用来与浏览器进行交互,展示数据的资源。
  • Model(模型)是应用程序的主体部分,用来处理程序中数据逻辑的部分。
  • Controller(控制器)可以理解为⼀个分发器,用来决定对于视图发来的请求,需要用哪⼀个模型 来处理,以及处理完后需要跳回到哪⼀个视图。即用来连接视图和模型。

Spring MVC就是一个实现了MVC模式的Web框架。 Spring MVC重点学习的是如何通过浏览器和用户程序进行交互。所以分为以下三个方面:

  1. 建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring 程序。
  2. 请求:用户请求的时候会带一些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数 的功能。
  3. 响应:执行了业务逻辑之后,要把程序执⾏的结果返回给用户,也就是响应。

二、建立连接

在SpringMVC中使用 @RequestMapping 来实现URL路由映射,也就是浏览器连接程序的作用。 代码示例:

代码语言:javascript
复制
@RestController //打标签
@RequestMapping("/hello") 
public class HelloController {
    @RequestMapping("/hello1") 
    public String hello1(){
        return "Hello, Spring MVC";
    }
}
2.1 @RequestMapping 注解介绍

@RequestMapping 是Spring MVC 中最常用的注解之一,它是用来注册接口的路由映射的。

  • 路由映射:当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射。

例如示例代码中表示服务器收到请求时,路径为 /hello/hello1 的请求就会调用hello1 这个方法的代码

2.1.1 @RequestController

@RequestController 的作用是打标签。在一个项目中有很多的类,类中又有很多的方法,Spring程序会对所以的类进行扫描,如果类加了注解 @RequestController ,Spring 才会看这个类里面的方法有没有 @RequestMapping 这个注解,这只是他的作用之一。

2.2 @RequestMapping 使用

@RequestMapping 既可以修饰类,也可以修饰方法,修饰类时是类路径,修饰方法时是方法路径。如果有类路径,则 url( 访问地址 ) 需要加上类路径。 且通常都会加上类路径,是为了提高可读性,与避免 url 冲突。 例如访问示例代码中的 url( 请求地址 ) :http://127.0.0.1:8080/hello/hello1

在这里插入图片描述
在这里插入图片描述

注:@RequestMapping 的URL路径前可以不加 ’ / ‘,Spring 程序启动时,会进行判断如果没有加’ / ‘,Spring 会自动拼接上一个’ / ‘。但通常情况下都加上’ / '。

2.3 @RequestMapping 请求方式

GET 请求:浏览器上发送的请求类型都是get,所以@RequestMapping 支持 get 请求。 POST 请求:通过构造 POST 请求可以看到该注解也支持POST请求。同样的,其也支持其他的请求。

如何指定GET 或者 POST 类型: 可以显示的指定@RequestMapping 来接收POST请求。 示例代码:

代码语言:javascript
复制
@RestController 
@RequestMapping("/hello") 
public class HelloController {
    /**
     * 仅支持post请求
     * @return
     */
    @RequestMapping(value = "/hello2",method = RequestMethod.POST)
    public String hello2(){
        return "hello, springmvc2";
    }
}

如果这种方式太麻烦,也可以换成下面的方式,除了GetMapping,还有其他注解方式:PostMapping等

代码语言:javascript
复制
@RestController 
@RequestMapping("/hello") 
public class HelloController {
    @GetMapping("/hello2")   除了GetMapping,还有其他注解方式:PostMapping等
    public String hello2(){
        return "hello, springmvc222";
    }
}

三、Postman 工具

当我们测试后端写的方式时,使用前端代码去测试非常的麻烦,因此可以使用Postman 接口测试工具。 创建请求:

在这里插入图片描述
在这里插入图片描述

简单的界面介绍:

在这里插入图片描述
在这里插入图片描述

raw:上传任意格式的文本,例如text,json,xml,html等。

在这里插入图片描述
在这里插入图片描述

四、请求

访问不同的路径,就是发送不同的请求。在发送请求时,可能会带一些参数,所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收。

4.1 传递单个参数

接收单个参数,在Spring MVC中直接用方法中的参数即可,例如:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {

    @RequestMapping("/r1")
    public String r1(String s1){
        return "接收到参数:" + s1;
    }
}

使用浏览器发送请求

在这里插入图片描述
在这里插入图片描述

此时后端接收到了s1参数的值,Spring MVC 会根据方法的参数名,找到对应的参数,赋值给方法。 如果请求参数不一致,那么就获取不到参数。

  • 注:使用基本类型接收参数时,参数必须传(除boolean类型),否则会报500状态码错误。
  • 类型不匹配时,会报400状态码错误。
  • 对于参数可能为空的数据,建议使用包装类型。
4.2 传递多个参数

使用多个形参,和接收单个参数一样,直接使用方法的参数接收即可,例如:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {

    @RequestMapping("/r4")
    public String r4(String name,Integer age){
        return String.format("接收到参数:姓名[%s],年龄[%d]",name,age);
    }
}

浏览器发送请求,后端接收到参数值。

在这里插入图片描述
在这里插入图片描述

当有多个参数时,前后端进行参数匹配时,是以参数的名称进行匹配的,因此参数的位置是不影响后 端获取参数的结果。

4.3 传递对象

如果有参数较多的情况,方法声明需要有很多形参,并且如果后续新增参数时,也需要修改方法声明,因此直接将这些参数封装为一个对象来进行接收,例如:

代码语言:javascript
复制
public class Person {

    private String name;

    private Integer age;

    private Integer gender;
	... ...
}
代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
/**
     * 接口一经完成不再轻易修改,如果修改必须通知对方,修改接口文档,书面通知
     * @param person
     * @return
     */
    @RequestMapping("/r5")
    public String r5(Person person){
        return "接收到参数:" + person;
    }
}

后端Spring 会根据参数名称自动绑定到对象的各个属性上,如果该属性未传递,那么赋值为null(基本类型则赋值为默认的初始值)。

4.4 后端参数重命名

在某些特定情况下,前端传递的参数key 和后端接收的key 不一致,就会出现参数接收不到的情况,此时可以使用 " @RequestParam "来重命名前后端的参数值,示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
    /**
     * @param name RequestParam 把前端参数赋值给name,重命名;required指定参数是否必须传递。 
     * @return
     */
    @RequestMapping("/r6")
    public String r6(@RequestParam(value = "sa",required = false) String name){
        return "接收到参数:" + name;
    }
}
在这里插入图片描述
在这里插入图片描述

Spring正确的将sa参数绑定到了后端参数name上,当浏览器使用name参数传递时,会报400状态码错误,也就是请求参数不正确。

  1. 当使用@RequestParam 进行参数重命名时,请求参数只有和@RequestParam 声明的名称一致,才能进行参数绑定传值。
  2. 使用 @RequestParam 进行参数重命名时,参数为必传参数,但也可以通过设置 @RequestParam 中的 required = false 来避免不传递参数时的报错。
4.5 传递数组

Spring 可以自动绑定数组参数的赋值

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/r7")
    public String r7(String[] array){
        return "接收到参数:" + Arrays.toString(array);
    }
}

使用Postman 发送请求

在这里插入图片描述
在这里插入图片描述

后端接收到了数组的参数。

4.6 传递集合

和数组类似,同一个请求参数名有多个;使用集合时,要用到 @RequestParam 注解绑定参数关系。示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/r8")
    public String r8(@RequestParam List<String> list){
        return "接收到参数:" + list;
    }
}
在这里插入图片描述
在这里插入图片描述

后端接收到了集合的参数。

4.7 传递 JSON

JSON是一种轻量级的数据交互格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此,JSON本质是字符串,负责在不同的语言中进行数据传递和交换。

传递 JSON 对象,需要使用 @RequestBody 注解,示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	/**
     * 传递JSON:@RequestBody :通过注解将http请求正文转为Person对象
     * @param person
     * @return
     */
    @RequestMapping("/r9")
    public String r9(@RequestBody Person person){
        return "接收到参数:" + person;
    }
}

使用Postman 发送JSON请求参数

在这里插入图片描述
在这里插入图片描述

响应结果中可以看到,后端成功给Person对象赋值。

4.8 获取URL中参数

@PathVariable 这个注解主要作用在请求URL路径上的数据绑定。SpringMVC可以获取到写在URL上的传递参数。示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/{articleId}")
    public String r10(@PathVariable("articleId") String articleId){
        return "接收到参数:" + articleId;
    }
}

使用浏览器发送请求

在这里插入图片描述
在这里插入图片描述
  • 如果方法参数名和URL中的变量名称一致时,可以不用给@PathVariable 的属性赋值;如果不一致时,则需要为其属性赋值。
4.9 上传文件

@RequestPart 注解作用为,获取文件作为的请求参数。示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/r12")
    public String r12(@RequestPart("file1") MultipartFile file){
        String originalFilename = file.getOriginalFilename();
        String contentType = file.getContentType();
        System.out.println(originalFilename);
        System.out.println(contentType);
        return "接收到文件:" + originalFilename ;
    }
}

使用Postman发送请求

在这里插入图片描述
在这里插入图片描述

看到响应中的数据为文件名。

4.10 获取Header

传统获取Header,示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request){
        String header = request.getHeader("User-Agent");
        return "header: " + header;
    }
}

通过浏览器访问得到header内容

在这里插入图片描述
在这里插入图片描述

简洁获取方式:通过 @RequestHeader 注解获取,参数较多时需要列出所有需要的参数。示例:

代码语言:javascript
复制
@RestController
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader("User-Agent") String userAgent){
        return "获取到Header: " + userAgent;
    }
}

五、响应

5.1 @RestController 和 @Controller

首先需要了解@RestController 和 @Controller 注解。其实 @RequestController = @Controller + @ResponseBody,而@Controller 是选择视图,返回的是视图,而@ResponseBody 定义返回的是数据。因此,如果想要返回静态页面,就需要使用@Controller。 @ResponseBody 可以修饰类和方法,修饰类时整个类中方法都返回数据;修饰方法则该方法返回的是数据。

5.2 返回静态页面

首先创建静态页面

在这里插入图片描述
在这里插入图片描述

代码示例:

代码语言:javascript
复制
@Controller
@RequestMapping("/request")
public class RequestController {
	@RequestMapping("/returnPage")
    public String returnPage(){
        return "/index.html";
    }
}

使用浏览器访问该接口得到的为index.html的页面。

在这里插入图片描述
在这里插入图片描述
5.3 @ResponseBody 返回数据

返回数据可以使用@RestController注解,也可以使用@Controller + @ResponseBody的形式,这两个是一样的。代码示例:

代码语言:javascript
复制
@Controller
@RequestMapping("/request")
public class RequestController {
	@ResponseBody //返回数据
    @RequestMapping("/returnPage1")
    public String returnPage1(){
        return "/index.html";
    }
}

浏览器访问接口发现使用了@ResponseBody接口后,将/index.html 作为一个字符串数据进行了响应,而不是页面。

在这里插入图片描述
在这里插入图片描述
5.4 返回JSON

Spring 会将Map,List,对象等进行JSON形式的响应。示例:

代码语言:javascript
复制
@Controller
@RequestMapping("/request")
public class RequestController {
	@ResponseBody
    @RequestMapping("/returnJson")
    public Person returnJson(){
        return new Person("zhangsan",18,1);
    }

	@ResponseBody
    @RequestMapping("/returnJson2")
    public Map<String,String> returnJson2(){
        Map<String,String> map = new HashMap<>();
        map.put("id","1");
        map.put("name","zhangsan");
        return map;
    }
}

通过浏览器访问接口发现,响应的数据为JSON形式。

在这里插入图片描述
在这里插入图片描述
5.5 设置状态码

Spring MVC 根据方法的返回结果已经自动设置了响应状态码,但是也可以手动指定状态码,可以通过Spring MVC 的内置对象 HttpServletResponse 提供的方法进行设置。 示例:

代码语言:javascript
复制
@Controller
@RequestMapping("/request")
public class RequestController {
	@ResponseBody
    @RequestMapping("/setStatus")
    public String setStatus(HttpServletResponse response){
        response.setStatus(403);
        return "设置状态码成功";
    }
}

在开发者工具下也可以看到对应状态码的改变:

在这里插入图片描述
在这里插入图片描述
5.6 设置Header

通过设置produces属性的值,设置响应的报头Content-Type。示例:

代码语言:javascript
复制
@Controller
@RequestMapping("/request")
public class RequestController {
	@ResponseBody
    @RequestMapping(value = "/setContentTyper",produces = "application/json")
    public String setContentTyper(){
        return "{\"OK\":1}";
    }
}

在开发者工具中也可以看到响应报头的类型为json形式。

在这里插入图片描述
在这里插入图片描述

还可以设置其他Header,借助Spring MVC 的内置对象HttpServletResponse 提供的方法来进行设置。

六、结语

到这里,关于 Spring Web MVC 前后端交互的核心内容就梳理得差不多了 —— 从连接的建立到请求的处理,再到响应的返回,这些都是日常接口开发里的高频操作,通过示例代码将一些入门注解的使用进行展示。希望这篇内容里的注解用法、参数传递技巧能帮你更快上手 Spring Web MVC 的实际开发~后续如果有更深入的技术点(比如拦截器、异常处理),也会继续分享,感谢各位支持。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Spring Web MVC 定义
  • 二、建立连接
    • 2.1 @RequestMapping 注解介绍
      • 2.1.1 @RequestController
    • 2.2 @RequestMapping 使用
    • 2.3 @RequestMapping 请求方式
  • 三、Postman 工具
  • 四、请求
    • 4.1 传递单个参数
    • 4.2 传递多个参数
    • 4.3 传递对象
    • 4.4 后端参数重命名
    • 4.5 传递数组
    • 4.6 传递集合
    • 4.7 传递 JSON
    • 4.8 获取URL中参数
    • 4.9 上传文件
    • 4.10 获取Header
  • 五、响应
    • 5.1 @RestController 和 @Controller
    • 5.2 返回静态页面
    • 5.3 @ResponseBody 返回数据
    • 5.4 返回JSON
    • 5.5 设置状态码
    • 5.6 设置Header
  • 六、结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档