java - 在 Spring Boot MVC 中为静态文件提供服务的 URL 路径的默认资源处理程序
问题描述
我有一个基于 Spring Boot 的项目(基于spring-boot-starter-parent
并且spring-boot-starter-web
我想在其中提供静态内容(内置在另一个模块中,并使用 复制到项目中maven-resources-plugin
)。
使用默认配置/约定,它会在 misc 中查找静态内容。位置,如classpath:/static
和classpath:/public
,如果要从根 URL 提供静态内容,这很有用,但对于本项目而言,情况并非如此。
我想/web/
通过派生WebMvcConfigurer
(并用 注释类@Configuration
)并覆盖该public void addResourceHandlers(ResourceHandlerRegistry registry)
方法来成功完成它;registry.addResourceHandler("/web/**").addResourceLocations("classpath:/static/web/");
这在显式引用/web/
-folder 中的文件名时有效,但我无法弄清楚如何模拟“默认文档”行为,例如index.html
应该为/web/
. 如果您index.html
在其中一个根目录中放置静态内容,它将由WelcomePageHandlerMapping
.
解决方案
找到解决方案;我还必须重写addViewControllers()
以创建显式映射并修复优先级:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/web/").setViewName("index.html");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
推荐阅读
- .net - 将 Avro 数据写入 BigQuery
- macos - 在 macOS 中切换单声道版本?
- javascript - 需要解析一个 Json 对象并将其附加到表中
- java - map.put 返回什么?
- angular - Ngx-charts 多系列折线图
- angular - 从 Springboot 到 Angular 的重定向问题
- nestjs - 在控制器上使用导入的拦截器在nestjs中不起作用
- websocket - 无法设置远程候选人 :-( (添加 1,预期 2)
- google-play - 在 Google Play 控制台的内部应用共享中上传 APK 但“找不到项目”
- jsonschema - Fastify 响应模式与 $merge-keyword 抛出 FST_ERR_SCH_BUILD