首页 > 解决方案 > 如何使用 springfox 和 JAX-RS 重新定位 swagger-ui.html?

问题描述

我将 JAX-RS 与 Spring Boot 和 springfox 一起使用以从注释中生成 swagger-ui。

目前文档位于http://localhost:8080/swagger-ui.html

但是,我现在需要将其移至http://localhost:8080/api/index.html

此问题评论之后,我有一个如下所示的类:

@Configuration
public class SwaggerUIConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addRedirectViewController("/documentation/v2/api-docs", "/v2/api-docs");
    registry.addRedirectViewController("/documentation/configuration/ui", "/configuration/ui");
    registry.addRedirectViewController("/documentation/configuration/security", "/configuration/security");
    registry.addRedirectViewController("/documentation/swagger-resources", "/swagger-resources");
  }

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
      .addResourceHandler("/documentation/**")
      .addResourceLocations("classpath:/META-INF/resources/");
  }

}

这会将页面置于http://localhost:8080/documentation/swagger-ui.html。但是,它仍然保留在http://localhost:8080/swagger-ui.html

我如何将其从 更改swagger-ui.htmlindex.html

如何从http://localhost:8080/swagger-ui.html移动它而不是复制它(或者只是使原始无法访问)?

如果我找到/替换上面的代码,documentation api我还有另一个问题,因为我的 servlet 已经在 /api 中定义。

@SpringBootApplication
@EnableSwagger2
public class SpringApplication extends SpringBootServletInitializer {

  @Bean
  public ServletRegistrationBean api() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(),"/api/*");
    registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, SwaggerResourceConfig.class.getName());
    registration.setName("api");
    return registration;
  }
}

public class SwaggerResourceConfig extends ResourceConfig {

  public SwaggerResourceConfig() {
    register(ApiListingResource.class);
    register(SwaggerSerializers.class);
  }

}

如何将 swagger-ui 移动到我的 servlet 根目录而不是我的上下文根目录?

标签: spring-bootjax-rsspringfox

解决方案


我为你做了解决方法。首先,我使用指向索引的方法创建了控制器。

@Controller
public class SwaggerUIRedirectController {

    @RequestMapping("/index")
    public String uiRedirectLink() {
        return "index";
    }

}

现在在 src/main/resources/templates 文件 index.html 下创建并将内容从该文件 ​​ https://github.com/sikynko/swagger_workaround/blob/master/index.html复制 到您的文件中。

现在在 src/main/resources/static/springfox.js 下创建并复制内容

https://github.com/sikynko/swagger_workaround/blob/master/springfox.js

进入你的。现在,当您编写http://localhost:8080/index时,您应该会看到自己的招摇。

我刚刚从 springfox-swagger-ui*.jar swagger-ui.html 和脚本 springfox.js 中复制了 html,我已经从

var urlMatches = /(.*)\/swagger-ui.html.*/.exec(window.location.href);

var urlMatches = /(.*)\/(.*).*/.exec(window.location.href);

我希望它会帮助你


推荐阅读