Spring single page for every url route and subroute quot;/a/** =gt; /a/index.html except /a/static/**quot;(每条url路径和子路径的Spring Single页面/a/**=gt;/a/index.html/a/静态/**qot;除外)
问题描述
我正在构建Spring网站,该网站在子路径下有反应单页应用程序,我当前的URL结构应该如下所示
localhost/admin/** => react app
localhost/** => spring thymeleaf/rest/websocket app for everything else
react app mapping:
localhost/admin/static/** => static react files
localhost/admin/** => react index.html for everything else
Example of project resources structure:
resources/
admin/ <= my admin react files is here
index.html
static/ <= react css, js, statics
templates/ <= thymeleaf templates
static/ <= theamleaf static
...
因此,我需要为每个URL路由及其子路由转发REACTIONindex.html
文件。除静态文件外,基本上只有一个页面的应用程序
看起来像是一项常见的任务,下面是我已经尝试过的一些方法:
项目的完整工作演示Spring+Reaction+Gradle如何构建项目以及为什么我不能将Reaction文件放在不同的目录(例如/Resources/Static):https://github.com/varren/spring-react-example
无法使用
forward:/admin/index.html
for/admin/**
,因为这将创建递归,因为admin/index.html
也在admin/**
下,必须以某种方式截取admin/static/**
。
无法在
WebMvcConfigurerAdapter
中使用addResourceHandlers
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/admin/**")
.addResourceLocations("classpath:/admin/");
}
index.html
仅映射到/admin/index.html
url,此选项几乎有效,但仅当您从localhost/admin/index.html
访问Reaction应用程序时
看到this和this和this和许多其他链接,我也有一些解决方案,但可能有一些通用选项我就是看不到
推荐答案
现在我正在使用自定义ResourceResolver
来解决此问题
演示:https://github.com/varren/spring-react-example
@Configuration
public class BaseWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
ResourceResolver resolver = new AdminResourceResolver();
registry.addResourceHandler("/admin/**")
.resourceChain(false)
.addResolver(resolver);
registry.addResourceHandler("/admin/")
.resourceChain(false)
.addResolver(resolver);
}
private class AdminResourceResolver implements ResourceResolver {
private Resource index = new ClassPathResource("/admin/index.html");
@Override
public Resource resolveResource(HttpServletRequest request, String requestPath, List<? extends Resource> locations, ResourceResolverChain chain) {
return resolve(requestPath, locations);
}
@Override
public String resolveUrlPath(String resourcePath, List<? extends Resource> locations, ResourceResolverChain chain) {
Resource resolvedResource = resolve(resourcePath, locations);
if (resolvedResource == null) {
return null;
}
try {
return resolvedResource.getURL().toString();
} catch (IOException e) {
return resolvedResource.getFilename();
}
}
private Resource resolve(String requestPath, List<? extends Resource> locations) {
if(requestPath == null) return null;
if (!requestPath.startsWith("static")) {
return index;
}else{
return new ClassPathResource("/admin/" + requestPath);
}
}
}
}
这篇关于每条url路径和子路径的Spring Single页面/a/**=>;/a/index.html/a/静态/**&qot;除外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:每条url路径和子路径的Spring Single页面/a/**=>;/a/index.html/a/静态/**&qot;除外
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01