为啥我的控制器中的根路径映射到 Spring Boot Web 应用程序中的 index.html?

Posted

技术标签:

【中文标题】为啥我的控制器中的根路径映射到 Spring Boot Web 应用程序中的 index.html?【英文标题】:Why does root path in my controller maps to index.html in spring boot web application?为什么我的控制器中的根路径映射到 Spring Boot Web 应用程序中的 index.html? 【发布时间】:2022-01-10 10:44:39 【问题描述】:

我正在测试一个用于 Spring Boot 应用程序的控制器。我想将资源映射到路径,这应该是我的 API 的一部分。 我的控制器对路径非常具体:

@Controller
public class DefaultController

  @RequestMapping("$web-interface")
  public String main()
  
    return "index.html";
  

这里的 'web-interface' 是一个属性,在 application.yml 文件中指定

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/search-engine
    username: landsreyk
    password: 12345678
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect
    show-sql: false
    hibernate:
      ddl-auto: none
web-interface: /admin

预期行为:

路径:localhost:8080/admin 映射到 index.html 资源

根路径:localhost:8080/ 没有映射,即 404 错误。

实际行为:

path: '/admin' 映射到 index.html

path: '/' 也映射到 index.html

但是为什么呢?我不应该只看到“Whitelabel Error Page”吗?没有控制器,它将根路径映射到 index.html 文件。这没有任何意义。

顺便说一下,这是我的项目结构。

解决方案:

将 index.html 重命名为任何其他名称,例如 main.html,并且根路径“/”将不再映射到该资源。

【问题讨论】:

【参考方案1】:

根路径 "/" 默认映射到 index.html。它是所有语言和框架的标准。 index.html 是应用程序的入口点

【讨论】:

【参考方案2】:

这是每个入口点的默认行为。 DefaultController 实现了默认行为,这就是为什么调用 "/""/root" 并不重要。 欲了解更多信息:https://docs.spring.io/spring-boot/docs/2.6.1/reference/htmlsingle/#web.servlet.spring-mvc.welcome-page

【讨论】:

以上是关于为啥我的控制器中的根路径映射到 Spring Boot Web 应用程序中的 index.html?的主要内容,如果未能解决你的问题,请参考以下文章

为啥自动导入会为 PhpStorm/WebStorm 中的根节点模块生成相对路径

如何将 Spring MVC 控制器映射到特定文件夹?

查找映射卷的根(网络附加存储)

spring mvc常用注解总结

Springboot全局异常处理

Spring Web MVC:对请求参数和路径变量使用相同的请求映射