Spring Boot Starter探秘:全面了解 spring-boot-starter-web

前文《一分钟上手:如何创建你的第一个 SpringBoot Starter》中,我们介绍了如何创建你的第一个 Spring Boot Starter以及SpringBoot框架中常用的Starter,本文就来介绍下Spring Boot框架中最重要的starter之一,spring-boot-starter-web。

spring-boot-starter-web介绍

spring-boot-starter-web 是 Spring Boot 框架里用于构建 Web 应用程序的核心启动器,它极大地简化了 Spring Web 应用的开发流程,通过自动配置和依赖管理 ,可以快速构建 RESTful API 服务 和传统的基于 MVC 的 Web 应用,后者现在基本很少用了,Vue的出现,现在基本都使用前后端分离的开发模式。

依赖的包

spring-boot-starter-web 通过一系列依赖包整合了构建 Web 应用所需的各种组件。下面将详细介绍这些核心依赖。

1. spring-boot-starter

这是所有 Spring Boot Starter 的基础包,提供了 Spring Boot 应用的核心功能,包括自动配置、日志管理等。它确保了所有 Starter 之间的兼容性和一致性,是构建任何 Spring Boot 应用的基础。

2. spring-boot-starter-tomcat

spring-boot-starter-web 默认集成了 Tomcat 作为内嵌服务器。这意味着你无需额外配置,应用启动时会自动启动一个 Tomcat 服务器,监听指定端口,提供 Web 服务。当然,如果需要,也可以切换到 Jetty 或 Undertow,只需排除 Tomcat 依赖并添加相应的 Starter 即可。

3. hibernate-validator

数据校验是Web 应用开发中的重要环节。hibernate-validator 支持基于注解的字段校验,如 @NotNull、@Size 等,确保传入的数据符合预期格式和约束条件。现在基本都使用spring-boot-starter-validation包了 ,具体使用见Spring Boot 注解探秘:@Validated 开启数据验证之旅(上)Spring Boot 注解探秘:@Validated 开启数据验证之旅(下)

4. jackson-databind

在构建 RESTful API 时,JSON 是最常用的数据交换格式。jackson-databind 提供了高效的 JSON 序列化和反序列化功能,使得 Java 对象与 JSON 数据之间的转换变得极为简便。

老外还是喜欢用jackson,国内的互联网公司大家更喜欢用阿里巴巴提供的fastjson。

5. spring-web

spring-web 是 Spring Framework 中用于构建 Web 应用的核心模块,提供了基础的 Web 功能,如 HTTP 请求处理、REST 支持等。它是 spring-webmvc 的基础,为后者提供底层支持。

6. spring-webmvc

spring-webmvc 是 Spring Framework 的 Web MVC 框架,基于模型-视图-控制器(MVC)设计模式。它负责将 HTTP 请求映射到相应的控制器方法,处理视图解析,以及管理会话和上下文等,是构建复杂 Web 应用的利器。

这6个jar包后续会针对性的来剖析其对应的源码和设计思想

在实际项目中的应用

为了更好地理解 spring-boot-starter-web 的应用,下面通过一个示例来演示其使用。

1. 创建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择 spring-boot-starter-web 作为依赖。

2. 定义实体类

java 复制代码
@Data
public class User {
    private Long id;

    @NotBlank(message = "用户名不能为空")
    private String name;

    @Email(message = "邮箱格式不正确")
    private String email;
}

3. 创建控制器

java 复制代码
@RestController
@RequestMapping("/users")
@Validated
public class UserController {

    private ConcurrentHashMap<Long, User> userStore = new ConcurrentHashMap<>();
    private AtomicLong idCounter = new AtomicLong();

    @PostMapping
    public Response<User> createUser(@Valid @RequestBody User user) {
        long id = idCounter.incrementAndGet();
        user.setId(id);
        userStore.put(id, user);
        return Response.success(user, HttpStatus.CREATED);
    }

    @GetMapping("/{id}")
    public Response<User> getUser(@PathVariable Long id) {
        User user = userStore.get(id);
        if (user != null) {
            return Response.success(user);
        }
        return Response.fail(HttpStatus.FAIL, "用户不存在");
    }

    @PutMapping("/{id}")
    public Response<User> updateUser(@PathVariable Long id, @Valid @RequestBody User user) {
        if (userStore.containsKey(id)) {
            user.setId(id);
            userStore.put(id, user);
            return Response.success(user);
        }
        return Response.fail(HttpStatus.NOT_FOUND, "该用户不存在,无法更新");
    }

    @DeleteMapping("/{id}")
    public Response<?> deleteUser(@PathVariable Long id) {
        if (userStore.remove(id) != null) {
            return Response.success();
        }
        return Response.fail(HttpStatus.NOT_FOUND, "该用户不存在,无法删除");
    }
}

4. 运行与测试

启动应用后,可以使用工具如 Postman 、CURL 或者Swagger对 /users 端点进行 CRUD 操作。自动配置的 spring-boot-starter-web 让这一切变得轻而易举,无需手动配置服务器或其他底层细节。

关键点解析

  • 自动配置:spring-boot-starter-web 自动配置了 Spring MVC、Jackson 和 Hibernate Validator 等组件,开发者只需专注于业务逻辑的实现。
  • 内嵌服务器:无需安装 Tomcat,应用启动即拥有一个完整的 Web 服务器环境,简化了部署流程。
  • 依赖管理:通过 Starter 管理所有相关依赖的版本和兼容性,避免了"依赖地狱"的问题。

总结

spring-boot-starter-web 作为 Spring Boot 生态系统中的核心启动器,**为 Web 应用开发提供了一站式的解决方案。**它通过合理的依赖管理和强大的自动配置机制,大大降低了 Spring Web 应用的开发门槛,提高了开发效率。无论是初学者还是经验丰富的开发者,都能从 spring-boot-starter-web 中受益,快速构建出高性能、可扩展的 Web 应用。

相关推荐
明神特烦恼12 分钟前
2.用户登录流程
java·开发语言·spring boot
今夜有雨.31 分钟前
线程同步与Mutex
c语言·c++·经验分享·笔记·后端·架构·学习方法
计算机-秋大田39 分钟前
校园二手交易平台小程序设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计
计算机学姐1 小时前
基于微信小程序的手机银行系统
java·vue.js·spring boot·mysql·微信小程序·小程序·intellij-idea
小菜日记^_^1 小时前
苍穹外卖项目总结(二)
java·spring boot·spring·tomcat·maven·mybatis·postman
有来技术2 小时前
「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管理系统
java·spring boot
Watermelo6172 小时前
使用JSONObject.getString()时报错:Cannot resolve method ‘getString‘ in ‘JSONObject‘,详解JSONObject三种库的用法
java·开发语言·spring boot·后端·java-ee·json·springboot
Quantum&Coder2 小时前
Rust语言的正则表达式
开发语言·后端·golang
ac-er88882 小时前
Yii框架中的日历控件如何实现日期选择器
后端·mysql·php