Spring Boot 中访问 swagger-ui.html(swagger 3) 报 404 错误
访问 http://192.168.0.157:8081/swagger-ui.html 重定向到 swagger-ui/index.html 页面,但是 报404 错误。
访问 http://192.168.0.157:8081/v3/api-docs 能正确返回数据。
代码中发现为了配置静态资源映射继承了 org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Resource
private AttachmentApiService attachmentApiService;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
//映射本地文件夹
Path directory = attachmentApiService.getDirectory();
/*附件资源**/
registry.addResourceHandler("/attachmentFile/**").addResourceLocations("file:"+directory.toString()+"\\");
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("*");
}
}
解决方案:
将上述配置类改为实现 org.springframework.web.servlet.config.annotation.WebMvcConfigurer 接口。
成功返回页面。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer
原因:
swagger 的页面配置类 org.springdoc.webmvc.ui.SwaggerWebMvcConfigurer 就是实现此接口。而当项目中存在 WebMvcConfigurationSupport 类型bean时不会加载这些接口实现类。
参考: org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration
找问题的过程中还遇到个坑就是项目中竟然还有个配置类继承 WebMvcConfigurationSupport。多浪费了一些时间,还以为不是这个问题导致的。
0评论