swagger-ui.html 页面不工作 springboot

问题描述 投票:0回答:14

我正在将基于 springMVC 的项目迁移到 spring boot。这是一个多模块项目。我无法启动 swagger-ui.html。我添加了调度程序 servlet,如下所示:

@Configuration
public class DispatcherServletConfig {

@Bean
public DispatcherServlet dispatcherServlet() {
    return new DispatcherServlet();
}

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
    ServletRegistrationBean registration = new 
  ServletRegistrationBean(dispatcherServlet(), "/prefix1/*");
    registration.addUrlMappings("/admin/*");
    registration.addUrlMappings("/prefix2/*");
     registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
    return registration;
}

}
private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES = 
          new HashSet<String>(Arrays.asList("application/json",
              "application/xml"));

@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES = 
          new HashSet<String>(Arrays.asList("application/json",
              "application/xml"));

@Bean
public Docket api() {
    ParameterBuilder aParameterBuilder = new ParameterBuilder();
    aParameterBuilder.name("Authorization").modelRef(new ModelRef("string")).parameterType("header")
            .description("Authorization Header").required(true).build();
    List<Parameter> aParameters = new ArrayList<>();
    aParameters.add((Parameter) aParameterBuilder.build());
    return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any()).build().apiInfo(apiInfo()).globalOperationParameters(aParameters).produces(DEFAULT_PRODUCES_AND_CONSUMES);
}

private ApiInfo apiInfo() {
    Contact contact = new Contact("Pvt. Ltd.", "<url>", "[email protected]");
    return new ApiInfo("API", "Information related to api exposed by system.", "1.0",
            "<url>",
            "<url>", new ArrayList<>());
}
}

我在我的 pom.xml 中添加了以下依赖项:

 <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-excelant</artifactId>
        <version>3.14</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.icu</groupId>
        <artifactId>icu4j</artifactId>
        <version>3.4.4</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.2.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.4</version>
    </dependency>
    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.0.6</version>
    </dependency>
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>3.8</version>
    </dependency>
    <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <version>3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>3.11</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.2-FINAL</version>
    </dependency>
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>2.6.0</version>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.19.1</version>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.10.19</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.scribe</groupId>
        <artifactId>scribe</artifactId>
        <version>1.3.7</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>retrofit</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>logging-interceptor</artifactId>
        <version>3.10.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.9.6</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>retrofit</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>logging-interceptor</artifactId>
        <version>3.10.0</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>converter-jackson</artifactId>
        <version>2.4.0</version>
    </dependency>
</dependencies>

还有一个插件:

<plugin>
            <groupId>io.github.robwin</groupId>
            <artifactId>swagger2markup-maven-plugin</artifactId>
            <version>0.9.3</version>
            <configuration>
                <inputDirectory>${project.basedir}/apiDoc/json</inputDirectory>
                <swaggerFile>swagger.json</swaggerFile>
                <outputDirectory>${project.basedir}/apiDoc/asciidoc</outputDirectory>
                <markupLanguage>asciidoc</markupLanguage>
            </configuration>
            <executions>
                <execution>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>process-swagger</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

我已将 apiDocs 存储在我的项目文件夹下。

每当我调用我的 {project_name}/prefix2/swagger-ui.html#

时,我都会收到 404 错误

enter image description here 每当我调用 {project_name}/swagger-ui.html# url 时,我都会得到这个 enter image description here

此外,swagger-ui.html 不会加载到 api 中。 enter image description here

我该如何解决这个问题? 谢谢,

java spring-mvc spring-boot swagger-2.0
14个回答
30
投票

对于使用较新版本 swagger 的用户,这里是访问 swagger ui 页面的解决方案。

替换这个:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
  </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>

这样:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

在您的 pom.xml 文件中。

通过以下网址访问页面(避免使用 .html 扩展名): http://localhost:8080/swagger-ui/

重建并重新启动服务器。你的问题就解决了!


19
投票

尝试使用

swagger-ui/index.html

而不是

swagger-ui.html

12
投票

就我而言,降级 swagger 版本就达到了目的。

看不到 swagger ui (404)

<swagger.version>3.0.0</swagger.version>

工作正常:

<swagger.version>2.9.2</swagger.version>

依赖关系:

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

8
投票

我相信 webMvcConfigurer 有问题。在这种特殊情况下,您的 SwaggerConfig Bean 仅用

@Configuration
@EnableSwagger2
进行注释。这两个注释足以读取配置并在 url 上运行 Springfox:

http://servert:port /project-name/api/v2/api-docs

但是,如果您想公开网页,则需要通过在配置 bean 上添加

@EnableWebMvc
注释来启用 webMvc,并为 webMvcConfigurer 提供适当的资源处理程序。

无需任何其他配置,我在下面发布的代码就足以公开 Swagger UI:

@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {

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


    @Bean
    public WebMvcConfigurer webMvcConfigurer()
    {
        return new WebMvcConfigurer()
        {
            @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/" );
            }
        };
    }
}

2
投票

尝试在您的 swagger 配置文件中添加以下代码:

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

2
投票

(声誉使我无法评论答案)

就我而言,降级 swagger 也起到了作用

来自:

<swagger.version>3.0.0</swagger.version>

<swagger.version>2.9.2</swagger.version>

2
投票

对于Swagger 3.0,您可以使用

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

那么 UI 是 http://localhost:8080/swagger-ui/ 而不是 http://localhost:8080/swagger-ui.html


1
投票

检查swagger-ui的jar版本。添加

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

并在 pom.xml 中

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

带有网址:http://localhost:8080/swagger-ui.html

这对我来说效果很好。如果您使用的是 springfox-swagger-ui jar 的其他版本,只需打开该 jar 并检查 swagger-ui.html 的路径并相应地更改您的 URL。


1
投票

使用以下依赖项,非常简单,不需要添加任何其他内容

     <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.6.9</version>
    </dependency>

网址是

 http://localhost:8090/swagger-ui/index.html

并确保您有权查看您想要在 Spring Security 中查看的所有 API

       .anyRequest().permitAll();

 

0
投票

在 Spring Boot 项目中你必须这样做:

Swagger的配置主要围绕Docket bean进行。

@Bean
public Docket api() {                
    return new Docket(DocumentationType.SWAGGER_2)          
      .select()                                       
      .apis(RequestHandlerSelectors.basePackage("org.example.sp.controller"))
      .paths(PathSelectors.ant("/foos/*"))                     
      .build();
}

Swagger 2 通过

@EnableSwagger2
注释启用。

要验证 Springfox 是否正常工作,您可以在浏览器中访问以下 URL:

http://servert:port /project-name/api/v2/api-docs

结果是一个包含大量键值对的 JSON 响应,这对于人类来说不太可读。幸运的是,Swagger 为此提供了 Swagger UI。

要检查你的 swagger-ui,你可以通过 url 来完成:

http://server:8080/toto/swagger-ui.html

通过这个方法,我们必须通过一些 swagger 注释来注释我们的端点: 有一个简单的文档这里

或者您可以按照示例这里


0
投票

我也遇到同样的问题

1.)首先需要在配置文件中添加以下注释:

@SpringBootApplication
@EnableSwagger2
public class PostApplication {

   public static void main(String[] args) {
      SpringApplication.run(PostApplication.class, args);
   }

}

2.) 第二在pom.xml中添加3个依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>2.9.2</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2 </artifactId>
    <version>3.0.0</version>
</dependency>

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

3.)最后打开http://localhost:8081/swagger-ui.html 8081:你的服务器端口


0
投票

以下是我对 spring-boot 项目的依赖项 -

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0-RC2</version> 

<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0-M4</version>

主类有这个注释-

@ComponentScan(basePackages = {"org.springdoc", "pckage_name_of_your_main_class"})

0
投票

现在我修复了并且它工作得很好,只需添加一个依赖项即可

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.2.0</version>
</dependency>

0
投票

由于

swagger-ui
的限制,我无法访问
SecurityConfig
,目前我正在使用
Java 21
Spring Boot 3.4.0
-

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.cors(Customizer.withDefaults());
    http.csrf(AbstractHttpConfigurer::disable);
    http.sessionManagement(sessionManager -> sessionManager.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
    http.exceptionHandling(exceptionHandling -> exceptionHandling.authenticationEntryPoint(
        (request, response, exception) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED, exception.getMessage())));

    // Use antMatchers() to handle specific paths
    http.authorizeHttpRequests(authorizeHttpRequest -> authorizeHttpRequest
        .requestMatchers("/swagger-ui.html", "/swagger-ui/**", "/v3/docs/**")
        .permitAll()  // Allow public access to Swagger UI and docs
        .requestMatchers("/api/auth/token", "/api/auth/refresh", "/api/hello", "/api/logout")
        .permitAll()
        .anyRequest()
        .authenticated()
    );

    http.httpBasic(Customizer.withDefaults());

    return http.build();
}

同时,我对

pom.xml
maven
的依赖程度如下 -

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.7.0</version>
</dependency>

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>6.4.1</version>
</dependency>

希望这对大家有帮助。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.