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