惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
宝玉的分享
宝玉的分享

博客园 - JackYang

I walk alone句子结构中 alone 后置的原因及同类用法解析 《用了3个月Cursor后,我删掉了自己写了10年的工具库》:从“造轮子自豪”到“承认AI写得更好”的心理崩塌与重建 2026年AI Agent时代下如何打造新一代研发体系:从熵增困境到智能工厂的范式重构(基于2025年底文章重写) AgentScope-Java 深度实践:构建企业级生产就绪的智能体应用 传统软件的AI重生:大模型时代下的系统重构与智能升级(2026实践指南)——从代码理解到数据交互,构建安全、高效、可落地的企业级AI集成架构 浅析英文复合名词“X Recording / X Logging”的翻译逻辑与本地化策略——兼论“How + 复合名词 + Works”句式的处理 浅析英文句式“How + 名词 + Works”的翻译逻辑与应用场景 会员契约论新观察:从身份标签到价值博弈——解构与评估现代会员体系 深度剖析akshare-data:OpenClaw生态中的金融数据Skill构建之道——手把手教你用akshare-data搭建个人AI量化系统 DeepSeek-V4:中国大模型的新范式革命—— 万字深度技术全景解析 深入 Java I/O 核心:BufferedInputStream 全景式源码解析与工程实践——2026 高并发时代下的性能基石,从 JDK 源码到虚拟线程(Project Loom)的协同优化 2026年前端工程化的新纪元:从Rust工具链革命到AI Agent原生架构演进 万字详文:解构 SessionBindingService —— AI智能体的“会话粘合剂” Windows 本地部署 Hermes Agent 安装教程 + 飞书接入,会自我进化AI Agent 智能体(全程避坑,亲测有效) 2026年最新、最全、可用的Docker 国内镜像源加速(截至 2026 年 4月14日 亲测可用) Java 中Jar包冲突问题及解决方案 如何自定义Spring Boot的错误页面显示? Spring Boot的全局异常处理器如何配置? “no main manifest attribute, in app.jar” 错误详解与解决方案 深度拆解三大 AI 核心协议:MCP、ACP、A2A,读懂智能代理全域通信底层逻辑—— 从技术原理、架构设计、落地场景到生态未来,全面揭秘 AI 智能体协作的底层标准 The Java® Virtual Machine Specification Java SE 26 Edition 中文版简介第二小节:The Java Virtual Machine The Java® Virtual Machine Specification Java SE 26 Edition 中文版简介第一小节:A Bit of History Java 中 “Error: Could not find or load main class” 错误详解与全面解决方案 云原生时代,Docker和虚拟机谁才是王者?K8s架构下的终极选型指南 2026年全网最新、最全、最好用的Excel快捷键大全:提升工作效率的必备技巧 2026年全网最新、最全的Word快捷键大全:从入门到精通 WPS快捷键大全及使用技巧 2026年最新版IntelliJ IDEA 2026.1下载、安装与配置教程: IDEA 2026.1新手使用教程(万字详解) OpenClaw源码大揭秘:WhatsApp登录工具如何用50行代码破解AI智能体的移动端困局? 2026AI Agent:AI Agent从“工具箱”到“操作系统”——深度解构AI聚合化(Aggregation)、自动化(Automation)与普惠化(Democratization
This application has no explicit mapping for /error
JackYang · 2026-04-13 · via 博客园 - JackYang

你遇到的类似以下的报错信息,看完本文你将能彻底解决此类错误:

"This application has no explicit mapping for /error, so you are seeing this as a fallback."

这是 Spring Boot 应用中非常典型的错误提示。下面从根本原因具体解决办法两方面详细说明。


🔍 一、为什么会报这个错?(根本原因)

这个错误本身不是程序崩溃,而是 Spring Boot 在处理请求失败后,试图跳转到默认错误页面 /error,但发现没有为 /error 路径注册任何控制器(Controller),于是只能显示这段“兜底提示”。

✅ 触发该错误的常见场景包括:

1. 访问了不存在的 URL(404 错误)

  • 比如你访问 http://localhost:8080/hello,但项目中没有任何 @RequestMapping("/hello") 的 Controller。
  • Spring Boot 默认会将 404 请求转发到 /error 端点。
  • 如果 /error 没有被映射 → 就出现此提示。

2. Controller 包路径不在主启动类扫描范围内

  • Spring Boot 默认只扫描 主启动类所在包及其子包 下的组件。
  • 如果你的 @RestController 写在了父包或无关包中,Spring 不会加载它。
  • 结果:所有接口都“找不到”,触发 404 → 转发到 /error → 无映射 → 报错。

✅ 示例:

// 主启动类在 com.example.demo
@SpringBootApplication
public class DemoApplication { ... }

// Controller 却在 com.controller(与 demo 同级)
@RestController
public class MyController { ... } // ❌ 不会被扫描到!

3. 缺少 Web 依赖(spring-boot-starter-web)

  • 如果你创建的是纯 Java 项目,忘记引入 Web 依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  • 那么 Spring Boot 不会启动内嵌 Tomcat,也不会注册默认的 /error 处理器。
  • 一旦发生异常或 404,就无法处理,直接暴露底层错误。

4. 方法请求类型不匹配(如用 GET 调用了 @PostMapping)

  • 浏览器地址栏发起的是 GET 请求。
  • 但你的接口是 @PostMapping("/delete")
  • Spring 抛出 HttpRequestMethodNotSupportedException
  • 最终也会转发到 /error,若未配置则报此错。

5. 手动关闭了 Whitelabel 错误页

  • application.properties 中设置了:
    server.error.whitelabel.enabled=false
    
  • 但又没有提供自定义的 /error Controller。
  • 导致错误时既不能显示默认页,也没有替代方案。

✅ 二、如何解决?(针对性办法)

✅ 方法 1:确保 Controller 在正确包下(最常见!)

  • 主启动类必须放在最外层包,确保能扫描到所有 Controller。

✅ 正确结构:

com.example.myapp
├── MyAppApplication.java       ← 主启动类(带 @SpringBootApplication)
└── controller
    └── HelloController.java    ← Controller 在子包中 ✅

❌ 错误结构:

com.example.myapp.MyAppApplication
com.other.Controller             ← 不在 myapp 包下 ❌

💡 如果无法移动包,可用 @SpringBootApplication(scanBasePackages = "com.other") 显式指定扫描路径。


✅ 方法 2:检查是否引入了 Web 依赖

确认 pom.xml(Maven)或 build.gradle(Gradle)包含:

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

// Gradle
implementation 'org.springframework.boot:spring-boot-starter-web'

没有这个依赖,Spring Boot 不会作为 Web 应用运行!


✅ 方法 3:不要禁用 Whitelabel(开发阶段)

除非你已实现自定义错误页,否则不要application.properties 中写:

server.error.whitelabel.enabled=false  # ❌ 开发时建议删除这行

保留默认即可看到更详细的错误信息(如状态码、异常堆栈)。


✅ 方法 4:使用 @RestControllerAdvice 统一处理异常(推荐生产环境)

创建全局异常处理器,避免依赖 /error 页面:

@RestControllerAdvice
public class GlobalExceptionHandler {

    // 处理 404
    @ExceptionHandler(NoHandlerFoundException.class)
    public ResponseEntity<?> handle404() {
        return ResponseEntity.status(404).body("Not Found");
    }

    // 处理其他异常
    @ExceptionHandler(Exception.class)
    public ResponseEntity<?> handleGeneral(Exception e) {
        return ResponseEntity.status(500).body("Server Error: " + e.getMessage());
    }
}

并在 application.properties 中启用:

spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false

✅ 方法 5:检查请求方法是否匹配

  • 浏览器地址栏只能发 GET 请求。
  • 如果你的接口是 @PostMapping@DeleteMapping,请用 Postman 或前端代码调用。
  • 否则会因方法不支持而报错。

🧪 如何快速验证问题?

  1. 启动应用后,访问一个明确存在的接口(如 /actuator/health,需引入 spring-boot-starter-actuator)。
  2. 如果能正常返回,说明 Web 容器正常 → 问题出在你的 Controller 配置。
  3. 如果连 /actuator/health 都报同样错误 → 很可能是缺少 spring-boot-starter-web

🔚 总结

原因解决办法
Controller 不在扫描路径 移动包位置 或 使用 scanBasePackages
缺少 Web 依赖 添加 spring-boot-starter-web
访问了不存在的 URL 检查 @RequestMapping 路径是否正确
请求方法不匹配 用正确 HTTP 方法调用(GET/POST 等)
禁用了默认错误页 删除 server.error.whitelabel.enabled=false
需要专业错误处理 使用 @RestControllerAdvice

💡 90% 的情况是因为 Controller 包路径不对或缺少 Web 依赖!