swagger页面不显示_Swagger UI在index.html页面上不显示任何内容

博主在尝试使Swagger与基于REST的Java应用程序配合工作时遇到问题。他们成功地让Swagger生成了API定义,但在访问Swagger UI时只看到空白页面。经过调整,通过使用BeanConfig而不是SwaggerConfig解决了问题。现在Swagger UI可以正常显示API文档。关键更改包括在Spring应用上下文文件中添加BeanConfig条目,并在Servlet中设置Swagger的资源包和扫描选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UPDATED with SOLUTION below!!!

//

感谢Ron的建议,我略微修改了我的设置,使用BeanConfig而不是SwaggerConfig,并使其正常工作 . 为了做到这一点,我不得不修改servlet,并且(这是我认为缺少的部分)将BeanConfig条目添加到spring应用程序上下文文件中,以便spring获取资源 . 我在下面的更新中包含了我的代码中的注释,显示了旧的和新的/更新的代码 . 它继续使用SwaggerConfig(也许我刚刚在Spring应用程序上下文文件中遗漏了一些东西?)但是BeanConfig正常工作,所以我将保留原样 .

//

我试图让Swagger运行我的本地基于REST的Java应用程序并取得了相当大的进步 . 但是,当我试图让Swagger UI工作时,我似乎错过了一些简单的东西 .

每当我真正点击这个地址时:http://localhost:9082/mbl/index.html我'm getting the little green swagger header at the top but a blank white body with no content underneath. Shouldn' t我在页面正文中看到的不仅仅是这个?

我的堆栈是这样的:Java 6 / Wink / Spring 3.1 / Jackson 2.5 / JAX-RS(JSR-311),我正在使用以下Swagger jar :swagger-annotations-1.3.10.jar / swagger-core_2.10- 1.3.10.jar / swagger-jaxrs_2.10-1.3.10.jar .

{"apiVersion":"1.0","swaggerVersion":"1.2","info":{"title":"Java API","description":"The following documentation contains the REST Service API useful for interacting with web services.","termsOfServiceUrl":"terms of service","contact":"email@test.com","license":"license type","licenseUrl":"license url"}}

我可以看到这是从我的SwaggerServlet.java生成的,如下所示:

package com.somewhere.mblsvc.web;

import...

public class SwaggerServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/* additional working code */

BeanConfig beanConfig;

public void setBeanConfig(BeanConfig beanConfig) {

this.beanConfig = beanConfig;

}

/* end additional working code */

@Override

public void init(ServletConfig servletConfig) {

try {

/* code from original post*/

// SwaggerConfig swaggerConfig = new SwaggerConfig();

// ConfigFactory.setConfig(swaggerConfig);

// swaggerConfig.setBasePath("/mbl/services");

// swaggerConfig.setApiVersion("1.0");

// swaggerConfig.setApiInfo(new ApiInfo("Java API", "The following //documentation contains the REST Service API useful for interacting with web //services.", "terms of service", "email@test.com", "license type", "license //url"));

// ScannerFactory.setScanner(new DefaultJaxrsScanner());

// ClassReaders.setReader(new DefaultJaxrsApiReader());

/* end code from original post*/

/* updated working code */

beanConfig.setBasePath("/mbl/x-services");

beanConfig.setVersion("1.0");

beanConfig.setResourcePackage("com.somewhere.mblsvc.resources");

beanConfig.setScan(true);

/* end updated working code */

} catch (Exception e) {

e.printStackTrace();

}

}

}

另外,我在我的spring应用程序上下文xml文件中有以下内容:

我的web.xml看起来像这样:

Wink Servlet

org.apache.wink.server.internal.servlet.RestServlet

Wink Servlet

/services/*

Swagger Servlet

com.somewhere.mblsvc.web.SwaggerServlet

-1

Swagger Servlet

/api-docs

这是我的Resource类的片段:

@Path("test")

@Api(value ="test", description="Test Services")

@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })

@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })

public class TestResource {

.

.

.

@GET

@Path("testInfo")

@ApiParam(defaultValue="you would put test case input here for a post")

@ApiOperation(value="Composite service returning extensive test information", response=com.somewhere.mblsvc.messages.test.testinfo.pojo.UserResponseMessage.class)

@ApiResponses(value={

@ApiResponse(code=200, message="OK"),

@ApiResponse(code=500, message="Internal Error")

})

@JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS)

public Response getTestInfo(@Context HttpHeaders headers,

@CookieParam(value = "testBrand") String testBrand) {

.

.

.

最后,我的index.html唯一重要的部分(我可以告诉)看起来像这样:

$(function () {

var url = window.location.search.match(/url=([^&]+)/);

if (url && url.length > 1) {

url = url[1];

} else {

url = "http://" + window.location.hostname + (window.location.port ? ':'+ window.location.port: '') + "/mbl/services/api-docs";

}

.

.

.

我很乐意根据需要提供更多信息 . 有谁知道我可能会缺少什么?

非常感谢!

<think>好的,我现在需要解决用户的问题:在Spring Boot项目中使用springdoc时,出现swagger-ui/index.html的404错误。用户之前可能尝试过配置但没成功,需要找到解决方案。 首先,我应该回忆springdoc和Swagger UI的基本配置。springdoc是替代Springfox的库,支持OpenAPI 3。用户可能没有正确添加依赖或者配置有误。根据引用[3],之前用Springfox需要添加springfox-swagger2的依赖,但现在用springdoc的话,应该换成springdoc-openapi-starter-webmvc-ui。 检查依赖是否正确。用户可能还在使用旧的Springfox依赖,或者没有包含springdoc的UI模块。正确的Maven依赖应该是: ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.1.0</version> </dependency> ``` 如果版本过旧也可能导致问题,需要确认最新版本。然后,检查配置类是否有误。springdoc需要像Springfox那样用@EnableSwagger2,但可能需要配置OpenAPI的Bean。例如: ```java @Configuration public class OpenApiConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI().info(new Info().title("API Docs")); } } ``` 另外,查看应用配置文件,确保没有禁用MVC自动配置,或者静态资源路径被修改。Spring Boot默认会处理静态资源,但如果有自定义的WebMvcConfigurer,可能会影响Swagger UI的路径。引用[2]中提到修改了启动类的注解,可能需要检查是否有其他配置冲突,比如排除数据源自动配置,但应该影响静态资源。 还有,检查应用的上下文路径。如果设置了server.servlet.context-path,Swagger UI的路径会变成{context-path}/swagger-ui.html。但根据springdoc的文档,访问路径应该是/swagger-ui.html,或者/v3/api-docs。用户可能访问了错误的URL,比如旧版的/swagger-ui/index.html,而正确的应该是/swagger-ui.html。 另外,安全配置可能拦截了Swagger的端点。如果项目用了Spring Security,需要允许访问相关路径: ```java @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests(auth -> auth .antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() .anyRequest().authenticated()); return http.build(); } } ``` 还有可能是缓存问题,清理后重启应用。或者版本兼容,检查Spring Boot和springdoc的版本是否匹配。例如,Spring Boot 3.x需要springdoc 2.x版本。 总结可能的解决步骤:1. 确认依赖正确;2. 检查配置类和Bean;3. 确认访问URL正确;4. 处理安全配置;5. 检查静态资源路径;6. 版本兼容性。</think>### Spring Boot集成springdoc后swagger-ui/index.html 404问题解决方案 #### 1. 检查基础依赖配置 确保正确引入了`springdoc-openapi-starter-webmvc-ui`依赖(Spring Boot 2.x或3.x通用): ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.1.0</version> </dependency> ``` 如果使用Spring Boot 3.x,需要验证Java 17+环境[^4]。 #### 2. 确认访问路径正确 springdoc默认提供两个访问端点: - API文档端点:`http://localhost:8080/v3/api-docs` - UI界面端点:`http://localhost:8080/swagger-ui.html` 旧版路径`/swagger-ui/index.html`已再适用。若配置了`server.servlet.context-path=/api`,则路径变为`/api/swagger-ui.html`[^5]。 #### 3. 检查安全配置 如果集成Spring Security,需放行相关端点: ```java http.authorizeRequests(auth -> auth .antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() ); ``` #### 4. 验证自动配置 通过查看启动日志确认端点注册: ```log o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [META-INF/resources/swagger-ui.html] ``` #### 5. 自定义路径配置(可选) 可在`application.properties`中修改默认路径: ```properties springdoc.swagger-ui.path=/custom-swagger ``` #### 6. 排除静态资源拦截 若使用自定义Web配置,需添加静态资源路径: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值