我正在尝试记录和现有 Rest API 一个 Spring MVC 项目(不是 spring boot!)。
我的应用程序称为 api ,因此 http://localhost:9090/api 将是根端点。因为我使用的是 spring-data-rest,所以在那个 URL 上我可以看到我所有暴露的存储库的 json。到目前为止,一切都很好。
我还可以访问 swagger JSON http://localhost:9090/api/v2/api-docs
问题
我无法访问 http://localhost:9090/api/swagger-ui.html 上的 swagger-UI 组件。它给了我
WARN org.springframework.web.servlet.PageNotFound- No mapping found for HTTP request with URI [/api/swagger-ui.html] in DispatcherServlet with name 'dispatcher'
启动 tomcat 时检查 spring 日志我可以看到一些奇怪的东西
DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory- Finished creating instance of bean 'swaggerApiListingReader'
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerConfig': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swagger2Controller': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerMediaTypeReader': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerOperationModelsProvider': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerOperationResponseClassReader': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerOperationTagsReader': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerResponseMessageReader': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerParameterDescriptionReader': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerExpandedParameterBuilder': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerApiListingReader': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swaggerProperties': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'springfox.documentation.swagger.configuration.SwaggerCommonConfiguration': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'springfox.documentation.swagger2.configuration.Swagger2DocumentationConfiguration': no URL paths identified
DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'swagger2Module': no URL paths identified
这似乎表明出于某种原因 swaggerController 未关联到任何 URL,因此出现 404 错误。
这些是我正在使用的版本
<spring.version>4.2.8.RELEASE</spring.version>
<spring-data.version>Gosling-SR4</spring-data.version>
<spring-data-rest>2.4.6.RELEASE</spring-data-rest>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>2.6.1</version>
</dependency>
这是我的 Java 会议。值得指出的是,方法 addResourceHandlers NEVER GETS executed
@Configuration
@EnableSwagger2
@EnableWebMvc
@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
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) {
System.out.println("******************************Configuring swagger resource handler");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
有什么建议么?简而言之,swagger-ui 不起作用。
原文由 felipe 发布,翻译遵循 CC BY-SA 4.0 许可协议
此解决方案由 @oksett 提供 此答案
创建一个配置类,扩展
WebMvcConfigurerAdapter
并覆盖以下方法:如果使用 Spring 5,而不是扩展
WebMvcConfigurerAdapter
实现WebMvcConfigurer
在您的情况下,您需要将
addViewControllers
添加和实施到SwaggerConfig
。另请注意addResourceHandlers
方法中的更改,以将/api
到救援处理程序位置。您现在应该可以访问我的 swagger-ui.html @
http://localhost:9090/api/swagger-ui.html