我有一个spring-boot应用程序,其中所有资源都重定向到index.html
,因为我的前端是SPA。
我想如何保持对localhost:8080/swagger-ui.html
的呼叫不变,并覆盖其他所有呼叫。
addResourceHandler
似乎不适用于正则表达式。关于如何解决此问题的任何想法?
import java.io.IOException;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**/*") //^\/[^(api|swagger)].*
.addResourceLocations("classpath:/public/")
.resourceChain(true)
.addResolver(new PathResourceResolver() {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
Resource requestedResource = location.createRelative(resourcePath);
return requestedResource.exists() && requestedResource.isReadable() ? requestedResource : new ClassPathResource("/public/index.html");
}
})
;
}
}
PS:我使用的是内存狐狸般的狐狸。
答案 0 :(得分:0)
您可以改为使用带有Controller
注释的Spring @RequestMapping
,该注释带有正则表达式路径。
//redirects all paths except one containing api or swagger references.
@RequestMapping(value = ""/**/{path:^(?!swagger|api).*}"")
public void redirect(HttpServletResponse response) throws IOException { response.sendRedirect("/"); }