WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑

前段时间搞SpringCloud,在配置swagger时遇到一个坑。曾一度认为是SpringCloud与swagger版本兼容问题。下面简单叙述一下此次事件。

首先是出现这个报错,很常见的资源找不到的问题:

WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑_第1张图片

2018-10-22 11:34:55 [http-nio-8084-exec-2] WARN   org.springframework.web.servlet.DispatcherServlet:1205 org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/swagger-ui.html] in DispatcherServlet with name 'dispatcherServlet'

然后添加这么一段代码:

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
		registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
	}

依然是资源找不到,打断点后发现,添加的这段代码在初始化时,根本不会执行!!!然后就开始各种调试了。

最后说一下结论:

那段代码是一定要写的,问题在于如何让他执行。

重写addResourceHandlers方法可以选择继承 WebMvcConfigurationSupport,或继承WebMvcConfigurerAdapter,或实现WebMvcConfigurer。

WebMvcConfigurationSupport:跟另外两个没有任何关系,只是内容更丰富一些。

WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑_第2张图片

WebMvcConfigurer:接口

WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑_第3张图片

WebMvcConfigurerAdapter:是WebMvcConfigurer的实现类,基本上是空实现,已经标注为不推荐使用

WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑_第4张图片

WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑_第5张图片

在重写addResourceHandlers后注意你的代码里面有没有其他地方继承或实现了WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer。一定要统一,不能是有的类继承这个,有的类继承那个!!!

继承WebMvcConfigurerAdapter或实现WebMvcConfigurer,功能差不多,可以在Application类中继承或实现,也可以在其他的地方。重写的方法都会执行。

继承WebMvcConfigurationSupport,若多个类继承该类,只会有一个类中的重写的方法执行,优先级:与Application平级>其他路径下的类,优先级高的类执行后,其他类不会执行。注意,不能在Application类中继承,即使继承了,重写的方法也不会生效。

你可能感兴趣的:(WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer遇到的坑)