首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Swagger-ui集成

Spring Swagger-ui集成
EN

Stack Overflow用户
提问于 2016-11-25 09:50:05
回答 2查看 1.8K关注 0票数 1

不用说,我知道有很多关于这个问题的问题,但我已经被困在试图修复这个问题两天了,而且我读到的大部分内容都已经过时了。

所以是的..。这就是我现在拥有的:

格莱德尔:

代码语言:javascript
复制
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-hystrix'
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-actuator'
compile 'org.springframework.boot:spring-boot-starter-security'
compile 'org.springframework.ws:spring-ws-core'
compile 'io.springfox:springfox-swagger2:2.4.0'
compile 'io.springfox:springfox-swagger-ui:2.4.0'
}

主修班:

代码语言:javascript
复制
@EnableSwagger2
public class Application {
public static void main(String[] args) {
        SpringApplication.run(FeedServiceApplication.class, args);
}

@Bean
public Docket swaggerSettings() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .pathMapping("/");
}

当我访问:http://localhost:8080/v2/api-docs时,我可以很好地获得json文档。另外,当我从github下载swagger,将源代码设置为上面的链接并在桌面上运行时,它也可以正常工作。不起作用的是把这两件事放在一起(让它在http://localhost:8080/swagger-ui.html上工作)。

有许多这样的教程,他们声称上面的内容将使swagger-ui工作:

http://kubecloud.io/guide-using-swagger-for-documenting-your-spring-boot-rest-api/

http://www.baeldung.com/swagger-2-documentation-for-spring-rest-api

还有大量其他教程,它们指示您从swagger git中添加dist文件夹到您的项目中。

也是这样的映射:

代码语言:javascript
复制
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

也失败,对于当前线程,抛出作用域“请求”不活动;异常。

在尝试了youtube上的一些教程之后,我所看到的就是“没有找到页面”。如果有人能解释我错过了什么,我会非常感激的。

TL:博士,我怎么才能让swagger-ui.html工作呢?

编辑:找到解决方案

如果其他人遇到这种情况,问题是,如果您有一个接受参数@RequestMapping("/{param}")的请求映射,那么dispatcherServlet就不再将/**映射到ResourceHttpRequestHandler。下面的代码解决了这个问题。

代码语言:javascript
复制
@Configuration
@EnableAutoConfiguration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurerAdapter{
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    @Override public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
        .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
        .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-11-25 10:02:10

这就是我们用来设置的。使用@Configuration注释的类。

代码语言:javascript
复制
@Configuration
@EnableSwagger2
public class SwaggerConfig {
  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
      .select()
      .apis(RequestHandlerSelectors.any())
      .paths(Predicates.not(PathSelectors.regex("/error")))
      .build()
      .apiInfo(apiInfo());
  }
  private ApiInfo apiInfo() {
    return new ApiInfo(
      "APP NAME",
      "APP DESCRIPTION",
      "1.0",
      null,
      new Contact("Firstname Lastname", null, "firstname.lastname@somewhere.net"),
    null,
    null);

}}

票数 0
EN

Stack Overflow用户

发布于 2016-11-25 10:04:31

代码语言:javascript
复制
<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${swagger.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>${swagger.version}</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-spi</artifactId>
        <version>${swagger.version}</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-core</artifactId>
        <version>${swagger.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-spring-web -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-spring-web</artifactId>
        <version>${swagger.version}</version>
    </dependency>

将上面的依赖项转换为gradle。我使用的版本是2.3.1

代码语言:javascript
复制
package XXXX;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableSwagger2
public class SwaggerConfiguration {

}

如前所述,我们启用了Swagger。

您可以为自定义头添加目录bean:

代码语言:javascript
复制
@Bean
  public Docket docket() {

 Parameter parameterAuthorization =
        new ParameterBuilder().name("Authorization").description("Authentication of the API User")
            .modelRef(new ModelRef("string")).parameterType("header").required(true).build();

    Parameter parameterClientUserId =
        new ParameterBuilder().name("user_id").description("Client user identifier")
            .modelRef(new ModelRef("string")).parameterType("header").required(true).build();

    return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any()).build()
        .globalOperationParameters(Lists.newArrayList(parameterClientUserId, parameterAuthorization));
  }

最后,在Spring上导入主应用程序类中的Swagger配置

@Import({SwaggerConfiguration.class})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40802015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档