Spring Boot,整合 Spring MVC,实现第一个 API 接口

前言

如何使用 Spring Boot 整合 Spring MVC 框架?

在学习传统 Java Web 开发时,我们是怎么接收用户请求的?

记得我上学的时候,大约在 2018 年,老师教我们使用 Servlet 来接收用户请求。

流程是这样的:需要定义一个类,实现 Servlet 接口,重写对应的方法,在方法里面带有请求对象参数,然后判断请求的类型,不同的请求类型设置不同的处理方法体,都是通过 if 语句来进行判断的。代码写得特别冗余,而且我已经有好多年没这样写过了。

传统开发方式的痛点

今天我用 AI 生成了一个传统 Servlet 的实例,代码如下:

java 复制代码
// 传统的 Servlet 实现方式
public class TraditionalServlet implements Servlet {
    @Override
    public void service(ServletRequest req, ServletResponse res) {
        // 需要判断请求类型,代码冗余
        HttpServletRequest request = (HttpServletRequest) req;
        String method = request.getMethod();
        
        if ("GET".equals(method)) {
            // GET 请求处理逻辑
        } else if ("POST".equals(method)) {
            // POST 请求处理逻辑
        }
        // 更多判断...
    }
}

这样的代码看起来特别有年代感,写起来十分繁琐。而且配置完成后还不能直接使用,还需要在 web.xml 中配置这个 Servlet 到底接收哪些请求才能使用,看起来很难受。

Spring MVC 的改进

后来了解了使用 Spring MVC,写起来方便了很多。当然它同样需要配置,比如扫描包等。我们来看一个 Spring MVC 的配置实例:

xml 复制代码
<!-- Spring MVC 配置文件 -->
<mvc:annotation-driven />
<context:component-scan base-package="com.example.controller" />

虽然比 Servlet 简单,但仍然需要配置文件。

Spring Boot 的简化方案

学习了 Spring Boot 整合 Spring MVC 后,这些配置通通都不需要了!我们只需要使用 @RestController 注解或 @Controller 注解修饰类,就可以进行使用了。下面我们来实际上手体验一下。

实战:创建第一个 API 接口

1. 添加依赖

要使用 Spring MVC,需要在 pom.xml 中添加 Spring Boot Web 依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

在 Spring Boot 中,要使用任何技术基本都是这个流程:先添加依赖,然后要么直接使用,要么使用配置类进行配置后再使用。大多数情况都是这个流程,没有太多例外的地方。

注意 :如果你的父项目使用了 dependencyManagement 并且用 <scope>import</scope> 标签对依赖进行了管理,那么它不会直接引入依赖,需要在子模块的 dependencies 中显式声明依赖,但不需要指定版本号。

2. 创建控制器

现在的 Spring MVC 不需要 XML 文件进行配置,只需要在对应的类上面添加 @RestController 或者 @Controller 注解就可以了。

java 复制代码
@RestController
public class HelloController {
    
    @RequestMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

@RestController@Controller 的区别:

  • @RestController 修饰的类,返回的参数全部会序列化成 JSON 形式返回到前端
  • @Controller 可以直接返回视图,比如 HTML 页面等
  • @RestController 比较适合前后端分离的项目

3. 启动测试

启动项目后,默认端口是 8080,在浏览器中访问 http://localhost:8080/hello,就可以看到返回的 "Hello World" 结果了。

4. 为控制器添加统一前缀

如果想给这个类的所有请求都添加一个统一的前缀,可以在类上面使用 @RequestMapping

java 复制代码
@RestController
@RequestMapping("/api")
public class HelloController {
    
    @RequestMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

重启后,访问路径变为 http://localhost:8080/api/hello

5. 全局路径配置

如果想给整个项目的所有请求添加统一前缀,可以在 application.yml 配置文件中进行统一配置:

yaml 复制代码
server:
  servlet:
    context-path: /app

重启后,访问路径变为 http://localhost:8080/app/api/hello

6. 修改服务器端口

同样在配置文件中,可以修改项目的端口:

yaml 复制代码
server:
  port: 9090
  servlet:
    context-path: /app

重启后,访问地址变为 http://localhost:9090/app/api/hello

总结

本期视频主要讲解了:

  • Spring Boot 如何引入 Spring MVC
  • Spring MVC 中几个常见的注解
  • 如何通过配置文件对项目进行配置
  • 实现了第一个请求映射方法

总体上,Spring Boot 大大简化了 Spring MVC 的配置和使用,让开发者能够更专注于业务逻辑的实现。

相关推荐
小码哥_常3 小时前
MyBatis-Plus:让数据库操作飞起来的神器
后端
2301_811274314 小时前
基于SpringBoot的智能家居管理系统
spring boot·后端·智能家居
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
舒一笑4 小时前
我把设备指纹生成逻辑拆开了:它到底凭什么区分不同设备?
后端·程序员·掘金技术征文
Nicander4 小时前
多数据源下@transcation事务踩坑
java·后端
郑州光合科技余经理4 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
sjsjsbbsbsn6 小时前
大模型核心知识总结
java·人工智能·后端
Moment6 小时前
2026 年,AI 全栈时代到了,前端简历别再只写前端技术了 🫠🫠🫠
前端·后端·面试
白晨并不是很能熬夜7 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
zshs0007 小时前
#从偶发无字幕到补偿探测链路:一次 B 站字幕导入问题的完整收敛过程
java·后端·重构