跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Spring Web MVC 入门:从概念到实战(上)

Spring Web MVC 是基于 Servlet 的 Web 框架,采用 MVC 模式分离业务逻辑与视图。介绍项目搭建、核心注解如@RestController 和@RequestMapping 的使用场景,以及 Postman 测试接口的方法。涵盖参数传递的各种形式,包括单个参数、对象、数组及集合的处理技巧,帮助开发者快速掌握后端接口开发基础。

奶糖兔发布于 2026/3/17更新于 2026/6/1223 浏览
Spring Web MVC 入门:从概念到实战(上)

Spring Web MVC 架构图

一、什么是 Spring Web MVC?

1.定义

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,是 Spring 框架中用于构建 Web 应用程序的核心模块。它遵循模型 - 视图 - 控制器(MVC)架构模式,简称 Spring MVC。

  • Servlet:Java 企业级开发的核心技术,主要用于在 Web 服务器上处理客户端请求并生成动态响应。Servlet 不能独立运行,必须部署在支持 Servlet 规范的容器内。

2.关于 MVC

2.1 什么是 MVC?

MVC 是一种软件架构模式,广泛应用于图形用户界面(GUI)和 Web 应用程序的开发中。它将应用程序的逻辑分为三个核心部分,实现了关注点分离,提高了代码的可维护性、可扩展性和复用性。

MVC 的核心组成:模型(Model)、视图(View)、控制器(Controller),三者各司其职又相互协作。

工作流程:

  1. 模型(Model):负责管理应用程序的数据和业务逻辑,是应用程序的'数据中心'。例如学生的家庭、号码、住址等数据。
  2. 视图(View):负责展示数据,是用户直接看到和交互的界面。例如网页界面。同一个模型可以对应多个视图。
  3. 控制器(Controller):作为模型和视图之间的'桥梁',负责协调两者的交互,处理用户的核心业务逻辑。例如,'订单控制器'接收下单请求,调用商品模型减少库存,调用订单模型创建订单,最后跳转至成功页面。

MVC 流程图

简要概括:用户 -> 视图 -> 控制器 -> 模型 -> 控制器 -> 视图 -> 用户

二、学习 Spring MVC

这一节我们主要解决三个问题:建立连接(浏览器与 Java 交互)、请求参数获取、以及结果响应。

1.项目准备

首先创建一个 Spring Boot 项目。点击 New Project,选择 Spring Initializr。如果没有该选项,需要自行下载插件。

创建项目

配置项目名称时注意:只能包含小写字母、数字、连字符(-)、下划线、句号(.),不能包含大写字母。

项目配置

添加依赖后,启动项目。

启动项目

接下来创建一个类,实现用户与浏览器的交互。

@RestController
public class Hello {
    @RequestMapping("/sayhello")
    public String say() {
        return "hello";
    }
}

在浏览器输入 http://127.0.0.1:8080/sayhello 查看结果。

访问结果

这里简单解释一下 URL 结构:

  • 127.0.0.1:本地主机地址,定位到当前电脑。
  • 8080:Spring Boot 应用的默认端口号,定位到电脑上运行的程序。
  • /sayhello:请求路径,接口地址,定位到具体的资源位置。

2.@RestController 注解介绍

@RestController 就像给控制器类贴了一个特殊标签,告诉 Spring 框架:这个类里的方法是传给前端的返回数据。让控制器里的方法直接返回的内容当成响应内容发给前端,不用再走'找页面'的流程。

如果不加 @RestController 注解会怎么样?通常我们会用普通的 @Controller 注解,或者干脆不加。

  • 使用 @Controller,方法返回的是'页面地址',而不是直接的数据。
  • 什么都不加,那么类只是一个普通类,接口无法被识别为控制器。

Controller 对比

3.@RequestMapping 注解详解

@RequestMapping 是 Spring 框架中非常重要的注解,用于将特定的 HTTP 请求映射到对应的处理方法。括号内的路径表示调用该方法的路径。路径不加 / 也可以,但建议加上以保持规范。

@RequestMapping 既可以用在类上,也可以用在方法上:

1.只用在类上(相当于'只给文件夹起名')
@RestController
@RequestMapping("/sayhello")
public class Hello {
    public String say() {
        return "hello";
    }
}

此时系统找到了'文件夹',但不知道具体是哪个文件。就像你知道地址在哪栋楼,但不知道几号房间。

类级别映射

2.只用在方法上(相当于'只给文件起名')
@RestController
public class Hello {
    @RequestMapping("/sayhello")
    public String say() {
        return "hello";
    }
}

系统不知道是哪个文件夹的文件,但会搜索所有文件夹来查找这个文件名。

如果出现相同的文件名呢?比如两个方法都叫 sayhello,但没有类级别的映射,就会发生路径重复报错。

3.用在类和方法上(相当于给文件夹和文件都取名)
@RestController
@RequestMapping("/sayhello")
public class Hello {
    @RequestMapping("/hello1")
    public String say1() {
        return "hello1";
    }

    @RequestMapping("/hello2")
    public String say2() {
        return "hello2";
    }
}

这样组合起来,可以进行精确定位,不容易发生报错。

组合映射

验证 RestMapping 是否支持 Post 和 Get

@RestController
@RequestMapping("/number")
public class Rest {
    // 即支持 post,又支持 get
    @RequestMapping("/1")
    public Integer num1() {
        return 1;
    }
}

另一种写法是指定方法类型:

@RequestMapping(value = "/6", method = {RequestMethod.GET, RequestMethod.POST})
public Integer num6() {
    return 6;
}

如果只想用 GET 或 POST 其中一种呢?

只用 GET

// 写法 1
@RequestMapping(value = "/2", method = RequestMethod.GET)
public Integer num2() {
    return 2;
}
// 写法 2(推荐)
@GetMapping("/3")
public Integer num3() {
    return 3;
}

只用 POST

// 写法 1
@RequestMapping(value = "/4", method = RequestMethod.POST)
public Integer num4() {
    return 4;
}
// 写法 2(推荐)
@PostMapping("/5")
public Integer num5() {
    return 5;
}

三、Postman 工具使用

1.什么是 Postman?

Postman 是一款广泛用于 API 开发、测试和调试的工具。其核心价值体现在高效、便捷地处理 API 相关工作。

  • 调试简单:图形化界面,填好参数就能发送请求,不用写代码,响应结果直观展示。
  • 功能全面:支持各种 HTTP 请求方法和数据格式。
  • 协作方便:可将 API 分组管理,共享给团队;多环境一键切换。
  • 自动化测试:可写脚本验证响应,批量运行测试并生成报告。

2.关于 API

API(Application Programming Interface,应用程序编程接口)是不同软件之间进行交互的一套规则、协议和工具的集合。它规定了一方如何向另一方请求服务或数据,以及另一方如何响应。API 就像两个软件之间的'桥梁'或'服务员',让他们能按照统一的方式沟通,而无需了解对方的内部工作原理。

就像我们去网购的时候,直接对自己想要的东西下单购买即可,不用了解其内部具体流程是如何执行的,最后商家都会把你要的东西给到你。这里'下单的流程'就是 API 规则。

Postman 界面

3.传参介绍

1.普通传参:通过查询字符串来传参

查询参数

2.form-data (multipart/form-data)

表单提交数据,在 form 标签中加上 enctype="multipart/form-data",通常用于提交图片/文件。对应 Content-type:multipart/form-data。

form-data

3.x-www-form-urlencoded

对应 Content-type:application/x-www-form-urlencoded。

urlencoded

4.raw

可以上传任意格式的文本,比如:text、JavaScript、json、html、xml。

raw

4.传递参数实战

1.传递单个参数
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/request")
public class RequestController {
    @RequestMapping("/1")
    public String method(String string) {
        return "接收单个参数:" + string;
    }
}

接收时,参数名要一致,否则无法接收到参数。

如果接受的参数基本类型不对应,会发生报错现象。

基本类型和引用类型传参的区别

@RequestMapping("/2")
public String method2(Integer i) {
    return "接收单个参数:" + i;
}

@RequestMapping("/3")
public String method3(int j) {
    return "接收单个参数:" + j;
}
  • 引用类型:传参时,若不传值,会赋值为 null,不会发生报错现象。
  • 基本类型:传参时,若不传值,可能会发生异常或默认值行为,需注意区分。
2.传递多个参数
@RequestMapping("/4")
public String method(String name, Integer age) {
    return "接收多个参数:" + "姓名:" + name + " 年龄:" + age;
}
3.传递对象
@RequestMapping("/5")
public String method(User user) {
    return "接收对象参数:" + user.toString();
}

@RestController
@RequestMapping("/User")
public class User {
    private String name;
    private int password;
    private int age;

    // Getter and Setter...
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getPassword() { return password; }
    public void setPassword(int password) { this.password = password; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    @Override
    public String toString() {
        return "User{" + "name='" + name + '\'' + ", password=" + password + ", age=" + age + '}';
    }
}

后端参数重命名:@RequestParam

如果前后端参数命名不一致,可能会导致接收不到数据。这时候我们可以使用 @RequestParam 来重命名前后端参数。

// 将其重命名为 str
@RequestMapping("/6")
public String method(@RequestParam("str") String s) {
    return "接收参数:" + s;
}

使用 @RequestParam 重命名时,参数就成了必传参数,否则将会报错。如果使用 @RequestParam,就不能再使用原来的前后端参数名了。

如果真的不想要传参数怎么办?

看一下 @RequestParam 的源码,其默认参数 required 为 true,所以一定要传参数。我们将其改为 false 就好了。

@RequestMapping("/7")
public String method(@RequestParam(value = "str", required = false) String s) {
    return "接收参数:" + s;
}
4.传递数组
@RequestMapping("/8")
public String method(String[] s) {
    return Arrays.toString(s);
}
5.传递集合

传递集合需要使用 @RequestParam 用于接收单个请求参数。如果要接收 List 类型,需要显示开启'允许多值'模式,否则 Spring 无法解析。

@RequestMapping("/9")
public List<Integer> method(@RequestParam List<Integer> num) {
    return num;
}

集合参数

目录

  1. 一、什么是 Spring Web MVC?
  2. 1.定义
  3. 2.关于 MVC
  4. 2.1 什么是 MVC?
  5. 二、学习 Spring MVC
  6. 1.项目准备
  7. 2.@RestController 注解介绍
  8. 3.@RequestMapping 注解详解
  9. 1.只用在类上(相当于“只给文件夹起名”)
  10. 2.只用在方法上(相当于“只给文件起名”)
  11. 3.用在类和方法上(相当于给文件夹和文件都取名)
  12. 三、Postman 工具使用
  13. 1.什么是 Postman?
  14. 2.关于 API
  15. 3.传参介绍
  16. 1.普通传参:通过查询字符串来传参
  17. 2.form-data (multipart/form-data)
  18. 3.x-www-form-urlencoded
  19. 4.raw
  20. 4.传递参数实战
  21. 1.传递单个参数
  22. 2.传递多个参数
  23. 3.传递对象
  24. 4.传递数组
  25. 5.传递集合
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MySQL 8.4.7 Windows 免安装版部署与配置详解
  • 《GPT 图解大模型是怎样构建的》技术解析与学习指南
  • 发那科 FANUC 涂胶机器人全解析:从程序到维护
  • BicycleGAN 模型评估指标与实战改进
  • AI 辅助艺术创作:风格迁移与构图生成
  • 无人机避障算法核心技术:五种主流算法原理与实战应用
  • WinSCP 下载安装与服务器连接配置指南
  • 现代 C++ 新特性 constexpr:从 C++11 到 C++20 的演进
  • Python Django Flask Vue 公务员考试交流平台与复习系统
  • PyQt5 基础入门:环境搭建、布局管理与常用控件详解
  • 基于 Rokid 灵珠 AI 平台的春节全能助手智能体开发实践
  • 无人机路径规划算法详解
  • 基于 DeepSeek 与 Cursor 构建智能代码审查工具实战
  • 前端加密 encrypt-labs 靶场:环境搭建与全关卡解析
  • BMAD 开发实战:掌握 AI 辅助开发完整流程
  • C 语言快速排序详解与优化实现
  • MCP 实战:Figma 设计稿自动转前端代码
  • n8n 深度解析:如何用可视化工作流构建 AI 自动化流水线
  • 机器人轨迹规划详解:从概念到常用方法
  • Docker 多容器编排:Compose 实战教程

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online