Установить базовый путь для swagger.ui.html - PullRequest
2 голосов
/ 25 мая 2019

Есть ли способ переместить контент Swagger 2 на другой базовый URL?

Я видел ", как сделать дружественный базовый URL для Swagger 2.8.0 ", а также этот вид обходного пути:

@RequestMapping("/swagger")
public String greeting() {
    return "redirect:/swagger-ui.html";
}

Проблема:

Это невозможно в моем случае!

На моем сервере размещены два веб-приложения и API-интерфейс REST, поэтому у меня здесь есть этот монстр:

@Controller
public class ForwardController {

    @RequestMapping(value = "/sitemap.xml", method = RequestMethod.GET)
    public String redirectSitemapXml(HttpServletRequest request) {
        return "forward:/a/web/assets/sitemap.xml";
    }

    @RequestMapping(value = "/robots.txt", method = RequestMethod.GET)
    public String redirectRobotTxt(HttpServletRequest request) {
        return "forward:/a/web/assets/robots.txt";
    }

    @RequestMapping(value = "/*", method = RequestMethod.GET)
    public String redirectRoot(HttpServletRequest request) {
        return "forward:/a/web/index.html";
    }

    @RequestMapping(value = "/a/**/{path:[^.]*}", method = RequestMethod.GET)
    public String redirectClients(HttpServletRequest request) {

        String requestURI = request.getRequestURI();

        if (requestURI.startsWith("/a/admin/")) {
            return "forward:/a/admin/index.html";
        }

        return "forward:/a/web/index.html";
    }

}

Это соответствует настройкам Spring Security для этой настройки.

Мне нужно, чтобы swagger был доступен под /a/swagger-ui.html, но возможно ли это?


Следующее не может работать и под моим ForwardController:

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете определить RouterFunction

@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
    SpringApplication.run(MyApp.class, args);
}
@Bean
RouterFunction<ServerResponse> routerFunction() {
    return route(GET("/swagger"), req ->
        ServerResponse.temporaryRedirect(URI.create("swagger-ui.html")).build());
}
}

Или создайте WebFilter:

@Component
public class SwaggerWebFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String path = request.getPath().pathWithinApplication().value();
        if (path.startsWith("/api/swagger-ui.html") || path.startsWith("/api/webjars")
                || path.startsWith("/api/api-docs") || path.startsWith("/api/configuration")
                || path.startsWith("/api/swagger-resources") || path.startsWith("/api/v2"))) {
            exchange = exchange.mutate().request(request.mutate().path(path.substring(4)).build()).build();
        }
        return chain.filter(exchange);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...