我一直在尝试将Springfox-Swagger UI 3.0.0添加到一个带有Spring Security(非spring- Boot )的常规Spring MVC应用程序中,但无法弄清楚。我最近将swagger-ui合并到2个spring- Boot 项目中,这要容易得多,没有任何问题。
我已经遵循了许多教程,没有一个是工作。
我遵循的最新教程是SpringFox的官方教程,我还遵循了https://github.com/springfox/springfox-demos的演示项目,更具体地说,是spring-xml-swagger demo。
请求/swagger-ui/、/swagger-ui/index.html、/swagger-ui.html和/v2/api-docs/ return 404。
我也试过旧版本的swagger-ui,但都不管用。因为这是公司项目,我不能透露太多,但任何建议都是好的。如果有必要,我会尝试用一些配置代码更新这篇文章。
来自pom.xml的文档
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.4.0</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>3.0.0</version>
</dependency>
字符串
Spring Framework 5.2.x
我的SwaggerConfig.class。
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Api Services")
.description("Api Services")
.version("v1")
.build();
}
@Bean
public UiConfiguration uiConfiguration() {
return UiConfigurationBuilder
.builder()
.defaultModelsExpandDepth(-1)
.build();
}
}
型
在xml config中。
<mvc:resources mapping="/swagger-ui/**" location="classpath:/META-INF/resources/webjars/springfox-swagger-ui/"/>
<mvc:view-controller path="/swagger-ui/" view-name="forward:/swagger-ui/index.html"/>
<mvc:resources mapping="index.html" location="classpath:/META-INF/resources/webjars/springfox-swagger-ui/"/>
<bean id="swaggerConfig" class="com.example.config.SwaggerConfig"/>
型
2条答案
按热度按时间vhmi4jdf1#
好吧,我不是很确定,但是in my experience at least some aspects of Spring MVC seem to be unhappy with a mix of XML and Annotation-based configuration,特别是
@EnableWebMvc
。在任何情况下,我们的工作应用程序,使用Spring 5.3.x和SpringFox 3.0,我们在
@EnableSwagger2
类中做了一些额外的事情,包括这里指定的内容:http://springfox.github.io/springfox/docs/current/#changes-in-swagger-ui
对于非引导应用程序,springfox-swagger-ui不再通过添加依赖项自动启用。它需要使用资源处理程序配置器(WebFluxConfigurer或WebMvcConfigurer)显式注册。
这个例子是从那个页面复制的,我之前肯定是从那个页面得到的:
字符串
因此,虽然XML配置看起来是重复的,但如果使用
@EnableWebMvc
,* 也许 * 必须在Annotation配置中。或者,为了在类中使用
@Bean
,类中也必须有@Configuration
,这是我们设置中的另一个不同之处。My Spring和SpringFox
pom.xml
摘录:型
我们的config类有这些注解:
型
(The最后一个是专门用于JSR-303验证感知的;基本操作不需要它。)
最后,我认为我们的单个Spring XML配置文件的唯一相关部分,它是通过
DispatcherServlet
从web.xml
文件加载的:型
与您的示例可能相关的其他差异:
UiConfiguration
beanDocket
构建器中使用自定义/有限路径选择器:.apis(RequestHandlerSelectors.basePackage("our.app.package"))
(如果后者有所作为,我会感到惊讶。)
最后,在应用程序启动时,您是否在服务器日志中看到这样的条目?(如果启用了调试日志记录。)
12:17:51,960 DEBUG _org.springframework.web.servlet.HandlerMapping.Mappings:'resourceHandlerMapping ' {/swagger-ui/**= ResourceHttpRequests [classpath [META-INF/resources/webjars/springfox-swagger-ui/]]}
对不起,我不能给给予一个更专业的,肯定的答案,但也许这至少有帮助。我至少可以确认非引导SpringMVC与SpringFox可以/确实工作。
6mzjoqzu2#
解决了
对于任何感兴趣的人来说,事实证明我需要通过web.xml配置Servlet配置,因为我们当前的servlet是用
<url-pattern>*.do</url-pattern>
配置的,这阻止了我访问与swagger相关的URL。解决我的问题的配置如下。
web.xml
字符串
swagger-servlet-context.xml
型