当前位置: 首页 > article >正文

Spring Boot 入门 与 无法解析符号 springframework 的解决

Spring Boot 入门的关键步骤
1 创建 Maven 工程
  • 操作目的: 通过 Maven 工程来管理项目依赖,Spring Boot 本身就依赖 Maven 或 Gradle 来简化依赖管理。

  • 操作方法:

    1. 打开 IDEA(IntelliJ IDEA)。
    2. 点击 New Project,选择 Spring Initializr
    3. 填写基本项目信息:
      • Group:项目组名称(类似包名,例如 com.example)。
      • Artifact:项目名称(例如 springboot-start)。
    4. 选择 Maven 构建工具,填写其他参数。
    5. 点击下一步后,进入依赖选择页面。

2 导入 spring-boot-starter-web 起步依赖
  • 操作目的: 添加 Spring Boot Web 相关的功能依赖,以便快速开发 Web 应用。

  • 依赖作用: Spring Boot Starter Web 提供了一整套 Web 开发需要的依赖,包括:

    • Spring MVC:处理 HTTP 请求和响应。
    • 嵌入式 Tomcat:直接启动项目,无需单独安装服务器。
    • JSON 支持:集成 Jackson 进行数据序列化/反序列化。
  • 操作方法:

    1. 在依赖选择页面,勾选 Spring Web 模块。

    2. IDEA 会自动生成一个包含 spring-boot-starter-web 依赖的 pom.xml 文件,示例如下:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      

3 编写 Controller
  • 操作目的: 实现一个简单的 HTTP 接口,返回 Hello World,验证项目能否正常运行。

  • 示例代码:src/main/java/com/example/controller 下创建一个类 HelloController

    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 World ~";
        }
    }
    
    • @RestController 表示这是一个控制器类,返回的数据直接是 JSON 格式。
    • @GetMapping("/hello") 映射 HTTP GET 请求到 /hello 路径上。

4 提供启动类
  • 操作目的: 通过 Spring Boot 的启动类来启动整个项目,运行 Spring 应用。

  • 示例代码:src/main/java/com/example 下创建主程序入口 SpringbootStartApplication

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringbootStartApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootStartApplication.class, args);
        }
    }
    
    • @SpringBootApplication 这是 Spring Boot 项目的核心注解,表示这是一个 Spring Boot 应用,包含以下功能:
      • 启动自动配置。
      • 启用组件扫描。
      • 提供入口配置。
    • SpringApplication.run(...) 启动整个 Spring Boot 项目。

启动项目并测试
1 启动项目
  • 在 IDEA 中运行 SpringbootStartApplicationmain 方法。

  • 如果项目启动成功,控制台会显示类似以下内容:

    Tomcat started on port(s): 8080 (http)
    Started SpringbootStartApplication in 2.345 seconds
    
2 测试接口
  • 打开浏览器,访问 http://localhost:8080/hello

  • 如果页面显示:

    Hello World ~
    

    恭喜!你的第一个 Spring Boot 应用已经成功运行了!??


总结
  1. Spring Boot 项目从创建到运行,只需要几步:

    • 使用 Spring Initializr 创建 Maven 工程。
    • 引入 Web 起步依赖。
    • 编写简单的 Controller。
    • 提供启动类并运行项目。
  2. 核心注解与模块:

    • @SpringBootApplication:负责整个项目的启动。
    • @RestController@GetMapping:定义 HTTP 接口。
    • spring-boot-starter-web:提供所有 Web 应用开发需要的基础功能。
  3. 开发效率极高:

    • 自动化配置,无需手动部署 Tomcat。
    • 起步依赖,让开发者专注于业务逻辑。


1 创建 Spring Boot 项目
选择 Spring Initializr
  • 在 IntelliJ IDEA 中创建新模块(New Module)。
  • 在弹出的窗口中,选择左侧的 Spring Initializr,这是一个专门为 Spring Boot 提供的创建工具。

2 填写基本信息

在 Spring Initializr 的界面中,需要填写以下信息:

  1. Server URL

    • 默认使用 start.spring.io,这是官方推荐的 Spring Boot 项目生成服务,能够快速初始化项目。
  2. Name

    • 项目名称,如 springboot-quickstart。这是你项目的名称,决定了生成的主文件夹名字。
  3. Location

    • 项目的存储路径,选择你想保存的位置。
  4. Group

    • 组织 ID,通常以域名的反向命名规则填写,例如 com.itheima
    • 这个值会影响生成的包结构。
  5. Artifact

    • 项目构件名称,例如 springboot-quickstart
    • 这个值会影响生成的最终构件文件名,如 springboot-quickstart.jar
  6. Package name

    • 自动生成的包名,例如 com.itheima.springbootquickstart
  7. JDK 和 Java 版本

    • JDK:选择你项目使用的 JDK 版本,通常使用 IDEA 的 Project SDK,推荐 17 或以上版本。
    • Java:这里填写的是语言的版本,也选 17。
  8. Packaging

    • Jar:用于生成一个可独立运行的 Java 应用程序(常用)。
    • War:用于部署到外部的 Tomcat、JBoss 等应用服务器中。

推荐选择 Jar:因为 Spring Boot 自带嵌入式的 Tomcat 服务器,无需外部服务器支持。


3 选择依赖

在下一步中,需要选择 Spring Boot 的版本和项目依赖:

  1. Spring Boot 版本

    • 通常选择最新的稳定版本,例如 3.1.2
    • 注意,Spring Boot 3.x 需要 Java 17 及以上版本支持。
  2. Dependencies(依赖):

    • 勾选 Spring Web
      • 提供 Web 开发相关的支持。
      • 包括 Spring MVC 和嵌入式 Tomcat。

4 生成项目
  1. 填写好信息后,点击 Create 按钮,Spring Initializr 会自动生成项目结构。

  2. 项目生成后,可以在 IDEA 中看到以下典型结构:

    springboot-quickstart/
    ├── src/
    │   ├── main/
    │   │   ├── java/
    │   │   │   └── com/itheima/springbootquickstart/
    │   │   │       └── SpringbootQuickstartApplication.java
    │   │   └── resources/
    │   │       ├── application.properties
    │   │       └── static/
    │   └── test/
    └── pom.xml
    

5 运行项目
启动主类

src/main/java/com/itheima/springbootquickstart/SpringbootQuickstartApplication.java 中,会自动生成以下代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootQuickstartApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootQuickstartApplication.class, args);
    }
}
  1. 点击 Run 按钮,运行 main 方法,启动项目。

  2. 控制台会输出类似以下信息:

    Tomcat started on port(s): 8080 (http)
    Started SpringbootQuickstartApplication in 2.456 seconds
    
测试接口
  1. 打开浏览器,访问 http://localhost:8080
  2. 如果看到 Spring Boot 的默认页面,说明项目成功运行。

6 Jar vs War 的区别
  1. Jar

    • Spring Boot 的默认打包方式,支持嵌入式服务器。
    • 项目运行后,可以直接通过 java -jar 命令启动。
  2. War

    • 用于将项目部署到外部的 Tomcat 或其他应用服务器中。
    • 不支持嵌入式服务器,需要将 War 文件手动部署到服务器。

总结
  1. 使用 IntelliJ IDEA 的 Spring Initializr 工具:

    • 自动完成项目初始化。
    • 简化了手动配置项目依赖的繁琐步骤。
  2. 关键点:

    • Group 和 Artifact 确定项目的包名和构件名称。
    • Java 版本和 JDK 一定要与 Spring Boot 版本匹配。
    • 推荐选择 Jar 打包方式,适合快速开发和测试。

1 pom.xml 的核心结构

pom.xml 是 Maven 项目的核心配置文件,用于管理项目的依赖、构建插件和配置项。以下是一个典型的 Spring Boot 项目的 pom.xml 文件结构:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.2</version>
        <relativePath/> <!-- Lookup parent from repository -->
    </parent>

    <groupId>com.itheima</groupId>
    <artifactId>springboot-quickstart</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-quickstart</name>
    <description>springboot-quickstart</description>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Web 起步依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 测试相关的起步依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Spring Boot Maven 插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2 parent 标签的作用
  • parent 是什么? 这里的 <parent> 是 Spring Boot 项目的基础配置,它继承了 spring-boot-starter-parent。这个父项目是一个包含了常用配置的 Maven 项目,它提供了:

    1. 默认依赖版本:不用手动指定每个依赖的版本号,Spring Boot 会自动管理。
    2. 插件管理:如 Maven 编译插件的配置。
    3. 全局属性:如默认的 Java 版本。
  • 版本号

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.2</version>
    </parent>
    
    • 这里指定的版本是 3.1.2,代表项目使用 Spring Boot 3.1.2 版本。
  • 为什么使用 parent

    1. 简化配置:不需要手动指定依赖版本号,减少配置复杂度。
    2. 一致性:确保项目中的所有依赖版本兼容。

如果不想使用 spring-boot-starter-parent,也可以通过自定义 BOM(Bill of Materials)来管理依赖版本。


3 dependencies 标签的作用

<dependencies> 标签中定义了项目需要的所有依赖。以下是图片中看到的两个关键依赖:

1. Spring Boot Web 起步依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 作用

    • 提供 Web 开发相关的所有功能,如 Spring MVC 和嵌入式 Tomcat。
    • 这是一个“起步依赖”,意味着它会自动引入所需的子依赖。
  • 子依赖包括

    1. Spring MVC:用于处理 HTTP 请求和响应。
    2. Jackson:用于 JSON 数据的序列化和反序列化。
    3. 嵌入式 Tomcat:无需安装外部服务器。
2. 测试相关依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 作用
    • 提供测试相关功能,如 JUnit、Mockito 和 Spring Test。
    • 这里的 <scope>test</scope> 表示该依赖只在测试阶段生效。

4 properties 标签的作用

<properties> 标签定义了一些全局属性,图片中可以看到:

<properties>
    <java.version>17</java.version>
</properties>
  • 作用
    • 指定项目的 Java 版本,这里是 17,与 Spring Boot 3.x 的最低要求一致。
    • Maven 构建时会参考这个版本号。

5 build 标签的作用

<build> 标签定义了 Maven 构建项目时的配置,尤其是插件配置:

Spring Boot Maven 插件
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
  • 作用
    1. 允许使用 mvn spring-boot:run 命令直接启动项目。
    2. 支持将项目打包成可执行的 Jar 文件(包含嵌入式服务器)。
    3. 优化构建过程,自动处理 Spring Boot 的特性。

6 起步依赖如何工作?

在图片中提到的 spring-boot-starter-web 起步依赖,其实它本身也是一个 Maven 项目,依赖了其他子模块。例如:

  • spring-boot-starter-web 的子依赖:

    - spring-boot-starter
      - spring-core
      - spring-context
    - spring-web
    - spring-webmvc
    - tomcat-embed-core
    - jackson-databind
    
    • 通过引入一个起步依赖,Spring Boot 会自动加载以上所有必要的库,开发者无需手动添加。

7 重点解析:Maven 依赖管理的优势
  • 传递依赖: Maven 会自动解析依赖树,下载所有间接依赖。
  • 版本管理: 通过 spring-boot-starter-parent,可以统一管理依赖版本,避免冲突。
  • 插件支持: 使用 spring-boot-maven-plugin 插件,简化了项目的构建和运行流程。

总结
  1. pom.xml 是项目的核心配置文件,包括依赖管理、构建配置等内容。
  2. Spring Boot 的起步依赖(starter) 是其精髓之一,简化了依赖配置和管理。
  3. 通过 Maven 的传递依赖特性,只需引入一个起步依赖即可获取所有相关库。
  4. 使用 spring-boot-starter-parent 可以统一管理依赖版本,避免配置繁琐。
通俗版解读补充

为了更容易理解 pom.xml 和 Spring Boot 起步依赖的内容,我用更通俗的方式再重新梳理一下核心概念和背后的工作原理,并补充一些生活化的类比。


1 什么是 pom.xml

pom.xml 就是 Maven 项目的“总指挥”,它负责告诉 Maven:

  • 项目需要用什么工具(依赖)。
  • 这些工具需要什么版本
  • 这些工具应该怎么打包
类比:

pom.xml 就像厨房里的菜谱

  • 菜谱上列清楚了你需要的材料(依赖)。
  • 如果某个材料需要特定品牌或规格(依赖版本),菜谱会注明。
  • 菜谱还会告诉你做菜的方法,比如“先炒后炖”(插件配置)。

一句话总结pom.xml 的任务就是帮你搞定“做项目需要的所有原材料和工具”。


2 parent 是什么?

parent 就是一个“万能配方模板”,Spring Boot 提供了一个默认的“模板”叫 spring-boot-starter-parent。当你用它时,它会:

  • 提供常用材料的推荐品牌(依赖的默认版本)。
  • 提供常用工具的推荐用法(插件配置)。
  • 你只需要关心业务逻辑,底层配置 Spring Boot 帮你做好了。
类比:

parent 就像是“万能家政阿姨”,你只需要说“我要炒青菜”,阿姨就会:

  1. 自动买合适的青菜、油和调料(设置默认依赖和版本)。
  2. 告诉你火候和时间(默认的插件配置)。

所以,有了 parent,你不需要自己去“菜市场”选材料、比价格了,交给阿姨搞定!??


3 什么是起步依赖?(starter

Spring Boot 的起步依赖(starter)是“功能套餐”,比如:

  • 想做 Web 开发?就点 spring-boot-starter-web 套餐。
  • 想做数据库操作?点 spring-boot-starter-data-jpa 套餐。

一个起步依赖 = 你需要的功能 + 所有相关的依赖包。

类比:

起步依赖就像是“快餐套餐”??:

  • 套餐名字spring-boot-starter-web
  • 套餐内容
    1. 主菜:Spring MVC(Web 核心功能)。
    2. 配菜:嵌入式 Tomcat(运行环境)。
    3. 调料:Jackson(JSON 序列化)。

当你点了这个套餐后,所有需要的东西 Maven 会自动打包好,直接送到你的项目里。


4 为什么 pom.xml 看起来很简单?依赖呢?

Spring Boot 的起步依赖看起来好像只有几行代码,但实际上它帮你隐式地引入了很多其他依赖。这叫做 传递依赖(Transitive Dependency)。

类比:

你点了一份汉堡套餐,里面就包含了:

  • 面包、牛肉饼、生菜、番茄、酱汁。
  • 包括包装盒、吸管和番茄酱小袋。

你只需要点套餐,其他的“附加物品”会自动送到。

实际操作: 你在 pom.xml 中写:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Maven 就会帮你自动拉取:

  • Spring MVC
  • 嵌入式 Tomcat
  • Jackson 等依赖。

所以,你看到的 pom.xml 非常简洁,但实际上背后帮你配置了很多东西。


5 什么是插件?为什么要配置 spring-boot-maven-plugin

spring-boot-maven-plugin 是一个专门为 Spring Boot 项目设计的插件,它主要有以下功能:

  1. 运行项目:可以直接通过 mvn spring-boot:run 启动项目,而不需要手动运行主类。
  2. 打包项目:可以将项目打包成一个独立运行的 Jar 文件,里面包含了嵌入式服务器。
类比:

插件就像是“智能厨具”:

  • 你说“我要热菜”,它就帮你自动开火,自动调好温度。
  • Spring Boot 的这个插件,就负责帮你简化项目运行和打包过程。

6 为什么要指定 Java 版本?(<java.version>

Spring Boot 3.x 要求 Java 17 或更高版本,这是为了利用 Java 新版本的特性,同时提高安全性和性能。

类比:

Java 版本就像是“食材的新鲜程度”:

  • 如果菜谱说必须用“新鲜的鸡蛋”(Java 17),但你用的是“快过期的鸡蛋”(Java 8),可能会导致菜做不好(项目报错)。

所以,Spring Boot 3.x 的项目,pom.xml 中必须写:

<properties>
    <java.version>17</java.version>
</properties>

7 起步依赖是怎么工作的?

当你引入 spring-boot-starter-web 后,它会自动帮你拉取所有的间接依赖,比如:

  • Spring MVC:用于处理 HTTP 请求和响应。
  • 嵌入式 Tomcat:用于运行 Web 应用。
  • Jackson:用于 JSON 数据处理。

这些依赖之间是有层级关系的(依赖树)。通过 Maven 的 传递依赖机制,这些内容会自动加载到你的项目中。

类比:

这就像你点了一个“火锅套餐”,商家不仅会给你火锅底料,还会给你锅、筷子、调料碗,全套都配好了,你只需要吃。


8 总结通俗版 + 专业版

概念

专业解释

通俗解释

pom.xml

Maven 项目的核心配置文件,负责依赖和插件管理。

项目的“菜谱”,告诉 Maven 用什么工具、怎么用。

parent

Spring Boot 提供的父项目,负责管理默认依赖版本和插件配置。

“万能家政阿姨”,自动帮你选好合适的依赖版本和配置。

起步依赖(starter

一组功能相关的依赖集合,如 spring-boot-starter-web 包含 Spring MVC、Tomcat 等。

“功能套餐”,点一个套餐,所有的功能自动带上。

传递依赖

Maven 自动加载直接依赖的间接依赖,比如 spring-boot-starter-web 会引入 Tomcat 和 Jackson。

点“汉堡套餐”,附带的面包、生菜、番茄酱会自动送到。

spring-boot-maven-plugin

专门为 Spring Boot 项目设计的插件,用于启动和打包项目。

“智能厨具”,自动帮你启动项目或打包成可执行文件。

Java 版本

指定项目需要的最低 Java 版本,Spring Boot 3.x 要求 Java 17。

“新鲜的食材”,版本不对可能会导致项目运行报错。



1 主启动类:SpringbootQuickstartApplication.java
这是项目的核心入口:
@SpringBootApplication
public class SpringbootQuickstartApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootQuickstartApplication.class, args);
    }
}
  1. @SpringBootApplication 注解

    • 这是 Spring Boot 的核心注解,相当于三个注解的组合:
      • @Configuration:标记当前类是一个配置类。
      • @EnableAutoConfiguration:启用 Spring Boot 的自动配置功能。
      • @ComponentScan:自动扫描当前包及其子包中的组件(例如 @Controller, @Service 等)。
  2. main 方法

    • Java 项目的入口,项目启动时会执行这里的代码。
    • SpringApplication.run(...) 会启动整个 Spring Boot 应用,加载所有的配置和 Bean,并启动嵌入式服务器(如 Tomcat)。
类比:

主启动类就像是你家的总电闸??,打开它,整个房子就通电了。@SpringBootApplication 是电路系统,main 方法是拉下总闸的动作。


2 资源目录:src/main/resources
这是存放项目静态资源和配置文件的地方:
  • static 文件夹

    • 用于存放静态资源,比如图片、CSS 文件和 JS 文件。
    • 如果你在浏览器访问 http://localhost:8080/图片名.jpg,Spring Boot 会自动从 static 文件夹中加载。
  • templates 文件夹

    • 用于存放动态模板文件(如 HTML 页面)。
    • Spring Boot 默认支持 Thymeleaf 和 FreeMarker 模板引擎,可以在这里写 HTML 页面。
  • application.properties

    • 这是 Spring Boot 项目的配置文件,用来设置项目运行时的参数,比如端口号、数据库连接信息等。

3 配置文件:application.properties

application.properties 是 Spring Boot 的默认配置文件。这个文件可以存放项目的全局配置。你也可以用 YAML 格式的文件(application.yml)替代它。

文件的作用:
  1. 配置项目的基本信息,比如端口号:

    server.port=8080
    
  2. 配置数据库连接信息:

    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=root
    
  3. 配置日志级别:

    logging.level.org.springframework=DEBUG
    
类比:

application.properties 就像是房子的电路开关面板。你可以用它控制:

  • 哪个房间的灯亮着(功能模块)。
  • 空调开到几度(数据库连接配置)。
  • 哪些灯更亮(日志级别)。

4 Spring Boot 的自动化优势

您提到 Spring Boot 在创建项目时,会自动生成主类和配置文件。以下是自动生成的好处:

  1. 主启动类的自动生成:

    • 不需要手动编写,只需要运行 main 方法即可启动项目,简化开发流程。
  2. 配置文件的自动生成:

    • application.properties 文件为项目提供了一个统一的配置入口,无需手动创建,直接可以用。
    • 你只需要在这个文件里填写配置项,而不需要修改代码。

5 通俗解读补充

概念

专业说明

通俗类比

主启动类

用于启动整个项目,加载 Spring 的配置和组件,并启动嵌入式服务器。

主启动类就像房子的总电闸,打开它,所有功能(服务、配置)都会生效。

@SpringBootApplication

自动配置项目,扫描组件和加载配置文件,简化了开发者的手动配置工作。

就像房子的电路系统,帮你布好线路和开关,不用自己布线。

application.properties

存放项目的全局配置,比如端口号、数据库连接信息等,方便修改和管理。

就像家里的电路面板,你可以控制哪个房间的灯亮着,空调调到几度。

资源目录

存放静态文件(CSS、JS)、动态模板(HTML)和配置文件,是项目资源的统一存放位置。

静态资源就像冰箱里的食材,动态模板就像食材的菜谱,properties 就是厨房里的调味料。

自动生成的文件

Spring Boot 提供的默认文件和配置,可以开箱即用,减少开发者的工作量。

相当于搬进新房子,开发商已经给你装好了灯具、水电,你只需要打开总开关就可以住进去。


总结:从代码到配置的完整理解
  1. 主启动类

    • Spring Boot 自动生成的主类包含 @SpringBootApplicationmain 方法,负责启动整个项目和加载所有配置。
  2. 资源目录

    • 用于存放静态资源(如图片、CSS 文件)、动态模板(如 HTML 页面)和全局配置文件(application.properties)。
  3. 配置文件

    • application.properties 是项目的配置入口,你可以通过它控制项目的运行参数,修改方便,扩展灵活。
  4. Spring Boot 的优势

    • 自动生成主类和配置文件,开发者只需专注于业务逻辑,节省了大量配置时间。

从您上传的图片中可以看出,您正在为 Spring Boot 项目添加一个简单的 Controller 类,并且通过这个类实现了一个 /hello 路径的 HTTP 接口。以下是详细的专业解读、通俗类比以及代码说明,帮助您更好地理解 Controller 的作用和实现过程。


1 Controller 是什么?

在 Spring Boot 中,Controller 是用于处理 HTTP 请求并返回响应的组件。它的作用是:

  • 接收用户发来的 HTTP 请求。
  • 根据请求路径和方法执行对应的业务逻辑。
  • 返回数据给客户端。
类比:

Controller 就像是餐厅里的服务员??:

  • 客户提出需求(HTTP 请求)。
  • 服务员根据需求送上对应的菜品(返回响应数据)。

2 创建 Controller 的步骤

您在项目中创建了一个名为 HelloController 的类,并在其中实现了一个简单的 /hello 路径接口。

代码结构
package com.itheima.springbootquickstart.controller;

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

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello world~";
    }
}
步骤分解:
  1. 创建 controller

    • 在项目的 src/main/java 目录下,创建一个 controller 包,用来存放所有的控制器类。
  2. 创建 HelloController

    • controller 包下,新建一个名为 HelloController 的类。
  3. 添加 @RestController 注解

    • @RestController 是 Spring Boot 的注解,表示这是一个控制器类,并且返回的数据是 JSON 格式。
    • 简化写法@RestController = @Controller + @ResponseBody
  4. 定义处理 HTTP 请求的方法

    • 方法签名:

      @RequestMapping("/hello")
      public String hello() {
          return "hello world~";
      }
      
    • @RequestMapping

      • 将路径 /hello 映射到 hello() 方法。
      • 当用户访问 http://localhost:8080/hello 时,会调用 hello() 方法。
    • 方法内容

      • 返回字符串 "hello world~",作为响应内容。

3 Controller 是如何工作的?

Spring Boot 的 Controller 依赖 Spring MVC 的框架。以下是请求的处理过程:

  1. 用户通过浏览器发送 HTTP 请求,比如访问 http://localhost:8080/hello
  2. 嵌入式 Tomcat 接收到请求,并将其传递给 Spring MVC。
  3. Spring MVC 根据路径 /hello 找到对应的 hello() 方法。
  4. hello() 方法执行并返回字符串 "hello world~"
  5. Spring MVC 将返回值包装成 HTTP 响应,并发送给用户。
类比:
  1. 用户(客户端):我点了一份“hello world”。
  2. 服务员(Controller):好的,我去厨房(代码逻辑)取来送给你。
  3. 厨房(方法逻辑):制作“hello world”这道菜。
  4. 用户(客户端):收到“hello world”,满意!

4 启动项目并测试接口
启动项目
  1. 找到项目的主启动类 SpringbootQuickstartApplication

  2. 运行 main() 方法。

  3. 如果控制台显示:

    Tomcat started on port(s): 8080 (http)
    Started SpringbootQuickstartApplication in X.XXX seconds
    

    说明项目启动成功。

测试接口
  1. 打开浏览器或 Postman。

  2. 访问地址 http://localhost:8080/hello

  3. 如果页面显示:

    hello world~
    

    说明接口测试成功!??


5 详细代码解析
@RestController
  • @RestController 表示当前类是一个控制器,返回值会直接作为 HTTP 响应体。
  • 如果没有这个注解,Spring Boot 会将返回值解析为视图(HTML 文件)。
@RequestMapping("/hello")
  • 这个注解将路径 /hello 映射到方法 hello() 上。
  • 你也可以使用更具体的注解,比如:
    • @GetMapping:只处理 GET 请求。
    • @PostMapping:只处理 POST 请求。
返回值:String
  • 方法 hello() 返回一个字符串。
  • Spring MVC 会自动将这个字符串封装为 HTTP 响应体,发送给客户端。

6 通俗说明补充

概念

专业解释

通俗类比

Controller

处理 HTTP 请求并返回响应的组件。

餐厅服务员,负责接收订单并送上对应的菜品。

@RestController

表示当前类是一个控制器,返回值会作为 HTTP 响应体。

服务员的工作牌,表明这个人专门负责处理请求并送菜。

@RequestMapping

将路径映射到方法上,比如 /hello 对应 hello() 方法。

菜单上的菜名和具体做菜的厨师绑定,比如“宫保鸡丁”就对应厨房的“厨师甲”。

返回值 String

方法返回的字符串会直接作为 HTTP 响应体返回给客户端。

服务员直接送上“文字菜谱”(“hello world~”),而不是盘子里的菜(复杂对象)。

启动项目

运行主类中的 main() 方法,启动 Spring Boot 项目和嵌入式 Tomcat。

按下家里的总电闸开关,所有电器(服务)自动启动。

测试接口

通过浏览器或 Postman 访问 http://localhost:8080/hello,查看返回的字符串是否正确。

去餐厅点一份“hello world”,看看服务员(Controller)能不能送上正确的菜。


7 总结与扩展
  1. 核心功能

    • Controller 是 Spring Boot 中用于处理 HTTP 请求的核心组件。
    • 通过简单的注解(如 @RestController@RequestMapping),可以快速实现一个 Web 接口。
  2. 扩展功能

    • 如果需要返回 JSON 数据,可以直接返回对象,Spring MVC 会自动将对象转换为 JSON。

      @GetMapping("/user")
      public User getUser() {
          return new User("张三", 18);
      }
      
    • 如果需要处理不同类型的请求,可以使用不同的注解(如 @GetMapping, @PostMapping)。

  3. 调试与优化

    • 如果接口未返回预期结果,检查:
      1. 项目是否正常启动。
      2. 路径是否正确。
      3. 注解是否写对。

从您的输出中可以看到,您当前安装的 Java 版本是 Java 21.0.4 LTS,这是一个非常新的版本(Java 21),理论上支持 Spring Boot 3.x 及其更高版本。然而,从之前的问题中可以推测您的项目配置可能存在以下问题:


可能的原因及解决方案
1 pom.xml 中 Java 版本配置不匹配

Spring Boot 项目通常通过 pom.xml 中的 <java.version> 属性来设置目标 Java 版本。如果这里的配置低于 17(比如 5 或 8),则会导致构建或运行错误。

解决方法:

打开 pom.xml 文件,确保 <java.version> 设置为 2117

<properties>
    <java.version>21</java.version> <!-- 或者根据需要改成 17 -->
</properties>

2 IntelliJ IDEA 的 JDK 配置不正确

即使您的系统 JDK 是 Java 21,如果 IntelliJ IDEA 使用的是其他版本的 JDK,也会导致不匹配的问题。

解决方法:
  1. 打开 File -> Project Structure -> Project
    • Project SDK: 设置为 Java 21
    • Project language level: 设置为 21 - (Preview) Virtual Threads, String Templates
  2. 打开 File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
    • Target bytecode version 设置为 21

3 Maven 配置问题

Maven 的 maven-compiler-plugin 插件可能未正确配置目标和源版本。

解决方法:

检查 pom.xml 文件,确保 Maven 编译插件配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.10.1</version> <!-- 确保插件版本是最新的 -->
            <configuration>
                <source>21</source> <!-- 或者 17 -->
                <target>21</target> <!-- 或者 17 -->
            </configuration>
        </plugin>
    </plugins>
</build>

4 清理并重新构建项目

配置完成后,执行以下步骤来清理和重新构建项目:

  1. 在 IntelliJ IDEA 的 Maven 面板中,执行 Lifecycle -> clean
  2. 执行 Lifecycle -> compile
  3. 再次运行项目的主类 SpringCodeApplication

验证步骤
  1. 确保所有配置正确(pom.xml、IDE、系统 JDK)。
  2. 再次启动项目,看是否问题已解决。

总结

从您的 Java 版本(21.0.4 LTS)来看,这个版本完全兼容 Spring Boot,但需要确保项目的 pom.xml 和 IDE 的 JDK 配置一致,目标版本不低于 17 或更高。


你这个报错呢,其实很常见:“程序包 org.springframework.web.bind.annotation 不存在”,翻译一下就是,“我找不到 Spring 的包啊,你是不是把我的依赖弄丢了?”。乍一看好像挺吓人,但其实一点都不复杂,我们手把手搞定它!??


原因分析

这个问题一般就是因为:

  1. spring-boot-starter-web 依赖没加
  2. Maven 依赖没有下载好
  3. Maven 或 IDE 配置出问题了

别担心,跟着我的步骤走,几分钟搞定它!??


1 检查 pom.xml 依赖

打开你的 pom.xml,看看里面有没有这段内容??:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

如果没有!那问题找到了,赶紧补上这段代码!
spring-boot-starter-web 是 Spring Boot 写 Web 项目必备的,类似于去肯德基点套餐,你不点“汉堡”,店员就问你到底来干嘛了!??


2 更新 Maven 依赖

依赖补上了,不代表立刻能用!你得让 Maven 把它“从云上拉到地上”!??
在 IntelliJ IDEA 里做下面几步:

  1. 右边的 Maven 面板 -> 找到 “Reload All Maven Projects” 按钮(两个循环箭头图标)点一下。
  2. 等一会儿,看控制台输出日志,确保没报错。

依赖下载好了,就像点了汉堡套餐,厨房已经准备好了原材料,接下来就能开吃啦!??


3 清理一下本地 Maven 缓存

如果上面没啥问题,但还是报错,那很可能是“厨房存货(Maven 本地仓库)”有点问题。我们直接清理掉重新下载:

  1. 打开本地 Maven 仓库,路径一般是:

    C:Users<你的用户名>.m2
    epository
    
  2. 找到 org/springframework 文件夹,把它删掉!??

  3. 回到 IDEA,右边的 Maven 面板,依次执行:

    • Lifecycle -> clean
    • Lifecycle -> compile

这下依赖就会重新下载啦,新的汉堡绝对香!??


4 检查 IntelliJ IDEA 的 JDK 和 Maven 配置

有时候厨房配置有问题,也会影响出菜。我们得看看 JDK 和 Maven 是不是“工具齐全”:

  1. File -> Project Structure -> Project

    • Project SDK:这里一定要选你的 Java 21!(别选错了哦)。
    • Project language level:选 21 - Sealed types, String Templates
  2. File -> Settings -> Build, Execution, Deployment -> Maven

    • Maven home directory:确保指向正确的 Maven 路径。
    • JDK for importer:这里也选 Java 21!

检查好了,一键保存,厨房工具没问题就可以继续了!??


5 重新运行看看

这些都搞定了,别忘了重新启动项目,看看问题是不是解决了:

  1. 运行主类:找到 SpringCodeApplication,右键运行。
  2. 测试接口:打开浏览器,访问 http://localhost:8080/hello,如果看到 "hello world~",那就大功告成!??

总结活泼版

嘿嘿,其实这个问题就是你的项目缺了个“Web汉堡”,或者 Maven 没把材料准备好。咱们只要:

  1. 补上 spring-boot-starter-web
  2. 更新、清理依赖。
  3. 检查 JDK 和 Maven 设置。

这样就能愉快地运行起来啦!???
要是还不行,随时甩给我新问题,我继续陪你把锅捞起来~!??

好吧,解决方案是最后点击左下角同步下面那个东西,然后点击 full sync解决了。

IDEA项目异常问题:Incremental Sync与Full Sync的作用及解决方法

在使用 IntelliJ IDEA 开发项目时,偶尔会遇到一些由于项目模型未正确同步而导致的问题。例如:

  • 项目依赖未加载正确(例如 spring-boot-starter-web 未生效)。
  • 编译错误提示“不支持发行版本 5”,但实际项目配置的是更高的 JDK 版本。
  • 修改 pom.xml 后 IDEA 没有正确刷新依赖。

如果你遇到了类似的问题,并在 IDEA 左下角看到类似的提示:

Incremental sync finished. If there is something wrong with the project model, run full sync.

那么本文将为你详细讲解Full Sync 的作用以及如何通过它快速解决这些问题。


?? 问题背景
1. 什么是 Incremental Sync?

Incremental Sync 是 IntelliJ IDEA 提供的一种轻量级的同步方式。当我们修改项目中部分内容(例如新增一个依赖)时,IDEA 会尝试只同步发生变化的部分,而不会重新构建整个项目模型。

虽然它更快,但在某些情况下,Incremental Sync 并不能完全解决问题。例如:

  • 依赖下载失败后无法重新拉取。
  • 项目配置(如 JDK、编译器设置)变更后,IDEA 可能没有正确识别。
  • IDEA 的缓存数据与实际项目模型不一致。

这时候,Incremental Sync 可能无法解决问题,就需要我们使用 Full Sync

2. 什么是 Full Sync?

Full Sync 是一种完全重新构建项目模型的同步方式。它会:

  • 强制重新读取项目的 Maven 配置pom.xml)。
  • 清理并刷新缓存的项目设置(如依赖、模块结构、编译器参数等)。
  • 重新拉取未成功下载的依赖,并检查本地仓库中的完整性。

它会花费更多时间,但能够解决很多由于增量同步无法检测到的问题。


问题案例再现

以一个 Spring Boot 项目为例,我们遇到以下问题:

  1. 项目编译时提示错误:

    java: 错误: 不支持发行版本 5
    
    • 项目实际使用的是 JDK 17,但 IDEA 的编译器似乎还在使用 JDK 5。
  2. 依赖未加载:

    • spring-boot-starter-web 依赖虽然在 pom.xml 中定义,但在 IDEA 的 Maven 视图中看不到。
  3. 无法定位 Spring 注解:

    • @RestController@RequestMapping 等注解无法导入,提示相关包不存在。

这些问题的根本原因是 项目模型未正确同步


?? 解决方案:运行 Full Sync
步骤 1:找到 Full Sync 按钮

在 IntelliJ IDEA 的左下角,你会看到同步的提示信息。如果之前已经进行了 Incremental Sync,你可能会看到:

Incremental sync finished. If there is something wrong with the project model, run full sync.

这时候,直接点击提示中的 run full sync 按钮即可触发完整同步。

步骤 2:通过 Maven 工具手动触发 Full Sync

如果没有看到提示,也可以手动执行 Full Sync:

  1. 在 IDEA 界面的右侧,打开 Maven 工具窗口(快捷键:Alt+1)。
  2. 找到项目的根节点(例如 spring-code)。
  3. 点击右上角的 刷新图标 或选择 Reimport All Maven Projects,这会强制 IDEA 重新同步所有依赖。
步骤 3:验证同步效果

同步完成后:

  • 打开 Maven 视图,确保所有依赖(如 spring-boot-starter-web)已经正确加载。
  • 检查项目的 JDK 配置是否和 pom.xml 中的 java.version 一致。
  • 编译项目,确认错误已经消失。

?? 补充说明:为什么 Full Sync 能解决问题?
  1. 依赖问题: Full Sync 会重新读取 pom.xml 中的依赖声明,并强制检查和拉取缺失的依赖。如果本地仓库中存在损坏的依赖文件(例如下载不完整的 jar 包),它会重新下载。

  2. JDK 和编译器问题: IDEA 的编译器设置有时候会和 pom.xml 中的配置不一致,导致错误的 Java 版本设置。Full Sync 会根据 Maven 配置更新编译器参数。

  3. 项目模型刷新: Incremental Sync 只更新改动的部分,而 Full Sync 会清除 IDEA 缓存并重新构建整个项目模型。



http://www.kler.cn/a/535215.html

相关文章:

  • app专项测试(网络测试流程)
  • 【学Rust写CAD】3 绝对坐标系详解
  • DeepSeek-R1:开源机器人智能控制系统的革命性突破
  • ASP.NET Core Filter
  • [paddle] 矩阵相关的指标
  • Nacos 的介绍和使用
  • 71.StackPanel黑白棋盘 WPF例子 C#例子
  • 基于Redis分布式锁
  • 达梦数据库从单主模式转换为主备模式
  • (苍穹外卖)项目结构
  • 深度学习|表示学习|卷积神经网络|DeconvNet是什么?|18
  • Android studio 编译速度增加
  • 微服务中服务治理都包含什么
  • 【回溯+剪枝】单词搜索,你能用递归解决吗?
  • [原创](Modern C++)现代C++的关键性概念: 文件编码细节之一:BOM(Byte Order Mark, 字节顺序标记)
  • 分库分表详解
  • 02.06 网络编程_概述
  • 补小识JVM中的分代收集理论
  • 离线安装Appium Server
  • 结合R语言、ArcGIS Pro、ChatGPT+生态学模型(PLUS模型、InVEST模型)的生态系统服务的多情景模拟预测及其应用
  • K8S组件架构
  • Eureka 高频考点
  • 网络工程师 (22)网络协议
  • C# foreach循环:性能提升
  • JAVA异步的UDP 通讯-服务端
  • WGCLOUD监控系统部署教程