Spring boot整合swagger2(版本号:2.9.2)出现404错误。这个实在没啥说的直接上错误和解决方法。
错误提示
页面出现这个错误:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Jan 06 16:38:25 CST 2020
There was an unexpected error (type=Not Found, status=404).
No message available
java控制台出现这样的日志:
o.s.web.servlet.DispatcherServlet - GET "/swagger-ui.html", parameters={}
o.s.web.servlet.PageNotFound - No mapping for GET /swagger-ui.html
o.s.web.servlet.DispatcherServlet - Completed 404 NOT_FOUND
o.s.web.servlet.DispatcherServlet - "ERROR" dispatch for GET "/error", parameters={}
o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
o.s.web.servlet.DispatcherServlet - Exiting from "ERROR" dispatch, status 404
但是/v2/api-docs又是可以访问的。
解决办法
办法1、检查是否有地方加了这个注解@EnableWebMvc
,有的话删掉就可以了。
办法2、检查是否有类继承了WebMvcConfigurationSupport
,有的话删掉就可以了。
因为上面两个会覆盖spring mvc原本的配置,比如覆盖yml里面的配置。
办法3、另外一种解决办法,就是继承WebMvcConfigurationSupport
后,重写下面的方法,重新配置静态资源:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
按上面三种方法排查,404错误基本可以得到解决了。 重新启动服务器,你会发现那个绿黄绿黄的swagger页面又出现了。
404错误github参考:https://github.com/springfox/springfox/issues/776
补充(2020-05-13)
笔者正在做的一个项目,引入了springfox-swagger2后,按照上面三个步骤检测了,swagger-ui.html页面依然404,后来排查发现,springfox-swagger-ui这个包没有被依赖引入。 在pom.xml里面加上这个swagger ui的jar包引用就可以了。
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>