如何在我的应用根目录下显示 swagger-ui?

How to show the swagger-ui at my app root?

在我的 spring 启动应用程序中,每当我导航到 http://localhost:8080/myapp/.

时,我都希望看到 swagger-ui

我启用了 swagger 并使用此配置将 / 重定向到 swagger-ui.html

@Configuration
@EnableSwagger2
public class Swagger2Config implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/swagger-ui.html");
    }
}

但是,这使我的浏览器记录此 JavaScript-Exception:

springfox.js?v=2.9.2:1 Uncaught (in promise) TypeError: Cannot read property '1' of null
    at e (springfox.js?v=2.9.2:1)
    at springfox.js?v=2.9.2:1
    at x (springfox.js?v=2.9.2:1)
    at Generator._invoke (springfox.js?v=2.9.2:1)
    at Generator.t.(:8080/myapp/anonymous function) [as next] (http://localhost:8080/myapp/webjars/springfox-swagger-ui/springfox.js?v=2.9.2:1:50487)
    at e (springfox.js?v=2.9.2:1)
    at springfox.js?v=2.9.2:1
    at new Promise (<anonymous>)
    at springfox.js?v=2.9.2:1
    at window.onload (springfox.js?v=2.9.2:1)
e @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1
x @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1
t.(anonymous function) @ springfox.js?v=2.9.2:1
e @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1
window.onload @ springfox.js?v=2.9.2:1
load (async)
(anonymous) @ springfox.js?v=2.9.2:1
r @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1
r @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1
(anonymous) @ springfox.js?v=2.9.2:1

堆栈跟踪的第一项指向 http://localhost:8080/myapp/webjars/springfox-swagger-ui/springfox.js?v=2.9.2 中的这一行:

return/(.*)\/swagger-ui.html.*/.exec(window.location.href)[1]

当我打开应用程序的根目录时,如何让我的 swagger api 文档出现?

我使用的依赖项:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

您可以通过此更改重定向请求:

registry.addViewController("/").setViewName("redirect:/swagger-ui.html");
//                                           ^-- "redirect" instead of "forward"

如果用户现在导航到 http://localhost:8080/myapp/,他将被重定向到 http://localhost:8080/myapp/swagger-ui.html

swagger 重定向到 swagger-ui 将解决这个问题,

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

你也可以尝试在 main 方法中添加 bean,

@Bean
RouterFunction<ServerResponse> routerFunction() {
    return route(GET("/swagger"), req ->
        ServerResponse.temporaryRedirect(URI.create("swagger-ui.html")).build());
}