Swagger-ui.html 给出空白页面

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

当我尝试在 Spring Boot 应用程序中启用 swagger 时,它显示空白页面。 我正在使用 url https://localhost:8080/context-path/swagger-ui/ 我能够获取 url https://localhost:8080/context-path/v2/api/docs 的 JSON 数据 我不明白 swagger ui 出了什么问题,任何人都可以帮助我。预先感谢。

Swagger 配置文件

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

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

我在pom.xml中添加了依赖项

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.5.1 </version>
  <relativePath /> <!-- lookup parent from repository -->
</parent>


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

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

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

我有这样的控制器

@GetMapping public ResponseEntity<ProjectDto> getAllProjects() { ProjectDto projectDto = new ProjectDto(); try { List<ProjectDto> projectDtos = projectService.getAllProjects(); projectDto.setProjectDtos(projectDtos.stream().collect(Collectors.toSet())); return new ResponseEntity<>(projectDto, HttpStatus.OK); } catch (ProjectNotFoundException exception) { LOGGER.info(exception.getMessage(), exception); projectDto.setErrorMsg(exception.getMessage()); return new ResponseEntity<>(projectDto, HttpStatus.BAD_REQUEST); } catch (Exception exception) { LOGGER.info(exception.getMessage(), exception); projectDto.setErrorMsg("Something went wrong with projects"); return new ResponseEntity<>(projectDto, HttpStatus.INTERNAL_SERVER_ERROR); } }
java spring-boot swagger-ui springfox
6个回答
3
投票

经过很长时间,它对我有用,在我的应用程序中,我使用 spring security,因此配置不匹配。这就是为什么我得到空白页。

我对安全配置和 JwtTokenAUthenticationFilter 类进行了以下更改

  1. 内部配置(HttpSecurity http),.antMatchers(“/登录”,“/”,“/project/jira/update”,“/leave”,

  2. “/v2/api-docs”,

    "/swagger-ui.html").permitAll();

  3. 内部配置(WebSecurity web),web.ignoring().antMatchers(“/ swagger-resources / ”,“/ webjars / ”) .antMatchers(HttpMethod.OPTIONS, "/**");

JwtTokenAUthentication 过滤器类

  1. JwtTokenAuthenticationFilter 的 doFilterInternal 内部 -> uri.indexOf("swagger") >= 0 || “/{context-path}/v2/api-docs”.equals(uri)

或 uri.contains("swagger")||uric.contains("/v2/api/docs")

这里的uri表示HttpServletRequest.getRequestURI();


1
投票

您是否尝试过在所有依赖项中使用相同的 Springfox 版本,如下所示?

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

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

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

尽管如此,我知道这并不能直接解决你的问题,但我建议你考虑转向springdoc。 Springfox 目前存在如此多的 bug,使用起来很痛苦。两年前我已经转向

springdoc
,因为它支持 Spring WebFlux,我对此感到非常高兴。此外,它还支持 Kotlin 协程,我不确定 Springfox 是否支持。

如果您决定迁移,

springdoc
甚至还有迁移指南


0
投票

springfox-boot-starter 附带 swagger-ui 和 swagger-2 参考

您能否尝试删除显式添加的依赖项和访问权限 /swagger-ui/ 或 /swagger-ui/index.html


0
投票

我的解决方案是,对 swagger-ui 的请求被自定义过滤器拦截,该过滤器正在检查特定键、值的标头。
检查您的过滤器,您的过滤器可能会拦截您的请求,并且不会返回任何内容,从而导致空的 swagger ui 页面


0
投票

如果您要扩展 WebSecurityConfigurerAdapter

public static final String[] SWAGGER_AUTH_WHITELIST = new String[]{"/**/swagger-ui.html", "/**/webjars/**", "/**/swagger-resources", "/**/swagger-resources/**", "/**/v2/api-docs", "/**/configuration/ui", "/**/configuration/security", "/**/swagger-ui/**", "/**/v3/api-docs/**"};
// this one ignores under spring security
@Override
protected void configure(HttpSecurity http) throws Exception {
...
.antMatchers(SWAGGER_AUTH_WHITELIST).permitAll()
...
}
// this one ignores upon spring security(in my opinion, not the best option)
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(SWAGGER_AUTH_WHITELIST);
    super.configure(web);
}

就我而言,我的自定义过滤器导致了问题,所以您可能只想检查/重构您的过滤器


0
投票

我们将 Spring 3.1.0 迁移到 3.1.2,并产生了附带影响,

这种方法在 Spring boot 3.1.0 中运行良好

...
.requestMatchers("/v3/**","/swagger-ui/**").permitAll()
...

但在版本 3.1.2 中,该方法在 swagger uri /swagger-ui 上出现空白屏幕

...
.requestMatchers("/v3/**","/swagger-ui/**").permitAll()
...

为了纠正它,我使用了带有单个参数的 AntPathRequestMatcher 的构造函数

...
.requestMatchers(new AntPathRequestMatcher("/v3/**")).permitAll()
.requestMatchers(new AntPathRequestMatcher("/swagger-ui/**")).permitAll()
...
© www.soinside.com 2019 - 2024. All rights reserved.