我正在处理旧的遗留项目,其中使用 WebMvcConfigurationSupport 配置了 spring boot,现在需要使用 spring doc 设置 swagger ui。不幸的是,当 @EnableWebMvc 被禁用时,它无法正常工作。
当我有这个
registry.addResourceHandler("/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/4.17.1/").resourceChain(false);
带宠物店的默认用户界面已加载。
使用 @EnableWebMvc 它可以工作,但核心应用程序功能被破坏,因为所有验证器和前端都不起作用。所以我不能用它。
通过调试,我看到没有调用 SwaggerIndexPageTransformer。
我该怎么办?
我有同样的问题。当我尝试调试 springdoc 代码时,我找到了一个解决方案。我注意到有类
SwaggerWebMvcConfigurer
有方法 addResourceHandler()
。因为我们已经使用了 WebMvcConfigurationSupport
在我看来这个方法没有被触发(例如 DelegatingWebMvcConfiguration
以某种方式委托类层次结构中的 addResourceHandlers 上层,我不确定)。
所以,这是我的代码帮助:
private final SwaggerIndexTransformer swaggerIndexTransformer;
public CloudServletConfig(SwaggerIndexTransformer swaggerIndexTransformer) {
this.swaggerIndexTransformer = swaggerIndexTransformer;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/swagger-ui*/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.resourceChain(false)
.addTransformer(swaggerIndexTransformer);
}
我,只是做着和
SwaggerWebMvcConfigurer
一样的事。我也这么认为:D
我只注意到一个问题。如果我首先点击
swagger-ui/index.html
url,则不会生成 api 定义:
但是如果我一开始点击
/v3/api-docs
,就会生成api定义然后我就可以浏览了swagger-ui/index.html