Spring Boot 3.x 从零开始——环境搭建与第一个 REST 项目

1. 引言

Spring Boot 是当前 Java 后端开发中最主流的框架之一。它基于 Spring Framework 构建,通过「约定优于配置」的理念,大幅降低 Spring 项目的搭建与开发成本。本文面向有 Java 基础但未接触过 Spring Boot 的开发者,从零开始完成开发环境准备,并跑通第一个 REST 接口。

2. Spring Boot 是什么

Spring Boot 并不是一个全新的框架,而是对 Spring Framework 的进一步封装与增强。它解决了传统 Spring 项目配置繁琐、依赖管理复杂、部署困难等问题。

2.1 与 Spring Framework 的区别

维度 Spring Framework Spring Boot
配置方式 大量 XML 或 Java 配置 自动配置(Auto Configuration)
依赖管理 手动管理版本 起步依赖(Starter)统一管理
部署方式 需部署到外部容器(如 Tomcat) 内嵌容器,可独立运行
项目搭建 手动创建并配置 Spring Initializr 一键生成

2.2 互补关系

Spring Boot 并没有替代 Spring Framework,而是建立在 Spring Framework 之上。Spring Framework 提供核心能力(IoC 容器、AOP、事务管理等),Spring Boot 则负责简化这些能力的装配与使用。你可以把 Spring Framework 理解为「引擎」,Spring Boot 则是「一键启动的整车」。

下面用一张图概括 Spring Framework 与 Spring Boot 的关系:
#mermaid-svg-2htx2AAt9QUEkgl5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2htx2AAt9QUEkgl5 .error-icon{fill:#552222;}#mermaid-svg-2htx2AAt9QUEkgl5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2htx2AAt9QUEkgl5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 .marker.cross{stroke:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2htx2AAt9QUEkgl5 p{margin:0;}#mermaid-svg-2htx2AAt9QUEkgl5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster-label text{fill:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster-label span{color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster-label span p{background-color:transparent;}#mermaid-svg-2htx2AAt9QUEkgl5 .label text,#mermaid-svg-2htx2AAt9QUEkgl5 span{fill:#333;color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .node rect,#mermaid-svg-2htx2AAt9QUEkgl5 .node circle,#mermaid-svg-2htx2AAt9QUEkgl5 .node ellipse,#mermaid-svg-2htx2AAt9QUEkgl5 .node polygon,#mermaid-svg-2htx2AAt9QUEkgl5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .rough-node .label text,#mermaid-svg-2htx2AAt9QUEkgl5 .node .label text,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape .label,#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-2htx2AAt9QUEkgl5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .rough-node .label,#mermaid-svg-2htx2AAt9QUEkgl5 .node .label,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape .label,#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape .label{text-align:center;}#mermaid-svg-2htx2AAt9QUEkgl5 .node.clickable{cursor:pointer;}#mermaid-svg-2htx2AAt9QUEkgl5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 .arrowheadPath{fill:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2htx2AAt9QUEkgl5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2htx2AAt9QUEkgl5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2htx2AAt9QUEkgl5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2htx2AAt9QUEkgl5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2htx2AAt9QUEkgl5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster text{fill:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster span{color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2htx2AAt9QUEkgl5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape p,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape .label rect,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2htx2AAt9QUEkgl5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2htx2AAt9QUEkgl5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2htx2AAt9QUEkgl5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 提供核心能力
提供核心能力
提供核心能力
封装与简化
自动配置
内嵌容器
Spring Framework
IoC 容器
AOP
事务管理
Spring Boot
起步依赖 Starter
独立运行

3. 版本选择指南

版本选择是新手最容易困惑的地方。这里给出明确的对应关系:

JDK 版本 Spring Boot 版本 说明
JDK 17 Spring Boot 3.0.x ~ 3.3.x 推荐组合,长期支持
JDK 21 Spring Boot 3.2.x ~ 3.3.x 新特性更多,适合新项目

3.1 推荐组合

本文推荐使用 JDK 17 + Spring Boot 3.3.x。原因如下:

  • JDK 17 是长期支持版本(LTS),稳定且生态成熟;
  • Spring Boot 3.3.x 是当前 3.x 系列中较新的稳定版本;
  • 两者组合在社区中资料丰富,遇到问题容易检索到解决方案。

注意:Spring Boot 3.x 要求 JDK 17 及以上,不再支持 JDK 8/11。如果你还在用旧版本 JDK,需要先升级。

4. 开发环境准备

4.1 安装 JDK 17

以 macOS 为例,使用 Homebrew 安装:

bash 复制代码
brew install openjdk@17

Windows 用户可前往 Adoptium 下载 JDK 17 安装包,安装后配置 JAVA_HOME 环境变量。

验证安装:

bash 复制代码
java -version

输出类似:

复制代码
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9)

4.2 配置 Maven

Maven 是 Java 项目的构建工具,Spring Boot 项目默认使用它管理依赖。

macOS 安装:

bash 复制代码
brew install maven

验证安装:

bash 复制代码
mvn -version

建议配置国内镜像仓库(阿里云),加速依赖下载。编辑 ~/.m2/settings.xml:

xml 复制代码
<mirrors>
  <mirror>
    <id>aliyun</id>
    <mirrorOf>central</mirrorOf>
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>

4.3 IntelliJ IDEA 适配

IntelliJ IDEA 是 Java 开发最常用的 IDE。建议使用 IDEA 2023.2 及以上版本,对 Spring Boot 3.x 支持更完善。

安装后需要配置:

  1. Project Structure → Project SDK 选择 JDK 17;
  2. Settings → Build Tools → Maven 选择本机 Maven 路径;
  3. 安装 Lombok 插件(如项目使用)。

5. 使用 Spring Initializr 创建项目

5.1 在线创建

访问 Spring Initializr,填写项目信息:

配置项 推荐值
Project Maven
Language Java
Spring Boot 3.3.x
Group com.example
Artifact demo
Java 17

5.2 依赖选择

本文只需要一个依赖:

  • Spring Web:提供 REST 接口开发能力,内嵌 Tomcat 容器。

点击「Generate」下载项目压缩包,解压后用 IDEA 打开。

5.3 项目结构解读

复制代码
demo/
├── src/
│   ├── main/
│   │   ├── java/com/example/demo/
│   │   │   └── DemoApplication.java
│   │   └── resources/
│   │       └── application.properties
│   └── test/
│       └── java/com/example/demo/
│           └── DemoApplicationTests.java
├── pom.xml
└── mvnw

关键文件说明:

  • DemoApplication.java:启动类,包含 main 方法,是项目的入口;
  • application.properties:配置文件,可设置端口、日志等;
  • pom.xml:Maven 依赖与构建配置;
  • mvnw:Maven Wrapper,无需本机安装 Maven 也可构建。

整个创建流程可以概括为:
#mermaid-svg-TXEtGXS3Yw81E3Y4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .error-icon{fill:#552222;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .marker.cross{stroke:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 p{margin:0;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster-label text{fill:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster-label span{color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster-label span p{background-color:transparent;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .label text,#mermaid-svg-TXEtGXS3Yw81E3Y4 span{fill:#333;color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node rect,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node circle,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node ellipse,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node polygon,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .rough-node .label text,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .label text,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .rough-node .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape .label{text-align:center;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node.clickable{cursor:pointer;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .arrowheadPath{fill:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster text{fill:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster span{color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape p,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape .label rect,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TXEtGXS3Yw81E3Y4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 访问 Spring Initializr
填写项目信息
选择依赖 Spring Web
点击 Generate 下载
用 IDEA 打开项目
项目结构就绪

6. 编写第一个 REST 接口

6.1 创建 Controller 类

在 com.example.demo 包下新建 HelloController.java:

java 复制代码
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

6.2 注解解读

  • @RestController:标记该类为 REST 控制器,所有方法的返回值直接作为 HTTP 响应体返回;
  • @GetMapping("/hello"):将 HTTP GET 请求映射到该方法,路径为 /hello。

7. 项目启动方式与日志解读

7.1 启动方式

在 IDEA 中直接运行 DemoApplication 的 main 方法,或在项目根目录执行:

bash 复制代码
mvn spring-boot:run

7.2 启动日志解读

启动成功后,控制台会输出关键日志:

复制代码
Starting DemoApplication using Java 17.0.11
Tomcat started on port 8080 (http) with context path ''
Started DemoApplication in 2.3 seconds
  • Tomcat started on port 8080:内嵌 Tomcat 已启动,监听 8080 端口;
  • Started DemoApplication in 2.3 seconds:应用启动完成。

7.3 验证接口

浏览器访问 http://localhost:8080/hello,页面显示:

复制代码
Hello, Spring Boot!

至此,你的第一个 Spring Boot REST 接口已经跑通。

一次完整的请求链路如下:
HelloController 内嵌 Tomcat 浏览器 HelloController 内嵌 Tomcat 浏览器 #mermaid-svg-wDlR3nm82hMpz5HL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wDlR3nm82hMpz5HL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wDlR3nm82hMpz5HL .error-icon{fill:#552222;}#mermaid-svg-wDlR3nm82hMpz5HL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wDlR3nm82hMpz5HL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wDlR3nm82hMpz5HL .marker.cross{stroke:#333333;}#mermaid-svg-wDlR3nm82hMpz5HL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wDlR3nm82hMpz5HL p{margin:0;}#mermaid-svg-wDlR3nm82hMpz5HL .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-wDlR3nm82hMpz5HL text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-wDlR3nm82hMpz5HL .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-wDlR3nm82hMpz5HL .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL .sequenceNumber{fill:white;}#mermaid-svg-wDlR3nm82hMpz5HL #sequencenumber{fill:#333;}#mermaid-svg-wDlR3nm82hMpz5HL #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL .messageText{fill:#333;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-wDlR3nm82hMpz5HL .labelText,#mermaid-svg-wDlR3nm82hMpz5HL .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .loopText,#mermaid-svg-wDlR3nm82hMpz5HL .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-wDlR3nm82hMpz5HL .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-wDlR3nm82hMpz5HL .noteText,#mermaid-svg-wDlR3nm82hMpz5HL .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-wDlR3nm82hMpz5HL .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-wDlR3nm82hMpz5HL .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-wDlR3nm82hMpz5HL .actorPopupMenu{position:absolute;}#mermaid-svg-wDlR3nm82hMpz5HL .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-wDlR3nm82hMpz5HL .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-wDlR3nm82hMpz5HL .actor-man circle,#mermaid-svg-wDlR3nm82hMpz5HL line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-wDlR3nm82hMpz5HL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} GET /hello 转发请求 执行 hello() 方法 返回 "Hello, Spring Boot!" HTTP 200 响应

8. 常见启动报错排查清单

报错信息 原因 解决方案
Unsupported class file major version 61 JDK 版本过低 升级到 JDK 17 及以上
Port 8080 was already in use 端口被占用 修改 application.properties 中的 server.port
Failed to configure a DataSource 引入了数据库依赖但未配置 移除相关依赖,或配置数据源
APPLICATION FAILED TO START 配置或依赖问题 查看日志中 Description 部分定位原因
Cannot resolve symbol 'SpringBootApplication' Maven 依赖未下载完成 执行 mvn clean install 刷新依赖

9. 总结

本文从 Spring Boot 的基本概念出发,完成了 JDK 17、Maven、IDEA 的环境搭建,通过 Spring Initializr 创建了项目,并编写了第一个 REST 接口。核心要点回顾:

  • Spring Boot 3.x 需要 JDK 17 及以上;
  • 推荐使用 JDK 17 + Spring Boot 3.3.x 组合;
  • @RestController + @GetMapping 即可快速暴露 REST 接口;
  • 遇到报错时,优先查看启动日志定位问题。

下一步可以尝试:添加 @PostMapping 接口、接入数据库、学习 Spring Boot 的自动配置原理。

相关推荐
念何架构之路1 小时前
go-grpc核心抽象接口
开发语言·后端·golang
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: Docker 架构拆解:镜像、容器、守护进程与 Registry
java·docker·架构
栗子~~1 小时前
SpringCloud Gateway 基于 Nacos 实现动态路由
java·spring cloud·gateway
FYKJ_20101 小时前
django个性化新闻推荐35173-计算机课程设计、毕业设计
java·spring boot·后端·python·架构·django·课程设计
今年下半年1 小时前
【消息队列】Spring Boot 集成 Kafka 消息队列:确保消费完成(手动提交偏移量+幂等判断+失败重试机制)
spring boot·kafka·幂等·失败重试
计算机毕设定制辅导-无忧学长1 小时前
《校园食堂在线订餐小程序的设计与实现》
java·vue.js·spring boot·微信小程序·uniapp·校园食堂在线订餐小程序
夜之眷属1 小时前
服务启动即崩:InetAddress.getLocalHost() 抛 UnknownHostException 排查记
java·运维·后端·docker
IT研究室2 小时前
最新计算机毕业设计选题推荐-基于spring boot的食品安全信息管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
Sayai2 小时前
MCP Server 开发实战:Spring AI 把后端日志查询暴露给 AI Agent(7 条设计原则与踩坑实录)
java·人工智能·ai agent·spring ai·mcp