将swagger-ui.html保留在spring-boot spa应用程序中

时间:2019-03-15 18:31:44

标签: java spring-boot swagger

我有一个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:我使用的是内存狐狸般的狐狸。

1 个答案:

答案 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("/"); }

Reference