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 的配置和使用,让开发者能够更专注于业务逻辑的实现。

相关推荐
Giant1003 小时前
针对 WebSocket 入门小白,结合这份聊天室代码,系统总结其基础知识点
后端
用户4099322502123 小时前
大表查询慢到翻遍整个书架?PostgreSQL分区表教你怎么“分类”才高效
后端·ai编程·trae
青梅主码3 小时前
麦肯锡最新报告:Agentic AI 时代,CEO 如何化痛为机?
后端
武子康3 小时前
大数据-123 - Flink 并行度设置优先级讲解 原理、配置与最佳实践 从Kafka到HDFS的案例分析
大数据·后端·flink
Mintopia3 小时前
🧙‍♂️ Next.js 权限区分之术:凡人 vs 管理员
前端·后端·全栈
野犬寒鸦3 小时前
从零起步学习MySQL || 第一章:初识MySQL及深入理解内部数据类型
java·服务器·数据库·后端·mysql
自由的疯3 小时前
java spring blob 附件 下载
java·后端·架构
两万五千个小时4 小时前
LangChain 入门教程:学习提示词模块
后端
JaguarJack4 小时前
多进程环境中解决 PHP 文件系统锁定问题指南
后端·php