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

相关推荐
苏三说技术34 分钟前
为什么越来越多人用 Pi ? - 苏三说技术
后端
YHL1 小时前
🚀 SSE 服务器发送事件与 BFF 层实战
前端·后端
星火10241 小时前
【LangChain4j系列05】RAG 检索增强生成完整指南
人工智能·后端
技术长镜头1 小时前
别再只说“走 B+Tree”:一条 SQL 在 InnoDB 中的完整寻址过程
后端·mysql
SomeB1oody1 小时前
【RustyML入门】3.8. 正则化与归一化层
开发语言·后端·机器学习·rust·教程
zhiSiBuYu05171 小时前
Flask Session 与 Cookie 新手实战指南
后端·python·flask
2601_953988071 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架
IT_陈寒2 小时前
SpringBoot自动配置坑了我三天,原来漏了这个注解
前端·人工智能·后端
AINative软件工程2 小时前
模型路由别写死在代码里:Policy-as-Code 才是 LLM 成本和质量的刹车片
后端
小蒜学长3 小时前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物