赞
踩
今天搞Springboot工程的时候发现访问不了,报错如下
浏览器端访问又报错如下:This application has no explicit mapping for /error
把Swagger的配置类改成实现WebMvcConfigurer就可以了
原先的类是继承方式的,如下:
此外,还需要添加放行资源(覆写 addResourceHandlers 方法),整个配置类如下(这是之后更新上来的内容):
- package com.boss.shared;
-
- import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.servlet.config.annotation.EnableWebMvc;
- import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
- import springfox.documentation.builders.ApiInfoBuilder;
- import springfox.documentation.builders.PathSelectors;
- import springfox.documentation.builders.RequestHandlerSelectors;
- import springfox.documentation.service.ApiInfo;
- import springfox.documentation.service.Contact;
- import springfox.documentation.spi.DocumentationType;
- import springfox.documentation.spring.web.plugins.Docket;
- import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
- /**
- * @Author: lequal
- * @Description 访问的时候直接输入地址:http://localhost:80/boss/doc.html (或者省略端口http://localhost/boss/doc.html) 即可看到API接口文档
- * 如果需要导出文档,只需要在文档页面左侧的菜单 -> 文档管理 -> 离线文档中即可下载对应的文档
- * @Date 2022/7/28
- */
- @Configuration
- @EnableSwagger2
- @EnableKnife4j
- // @EnableWebMvc // 如果jackson不会序列化返回数据中的null值(会忽略掉),则打开该注解
- public class SwaggerConfig implements WebMvcConfigurer {
- @Bean
- public Docket api() {
- return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).pathMapping("/").select()
- .apis(RequestHandlerSelectors.basePackage("com.boss")).paths(PathSelectors.any()).build();
- }
-
- private ApiInfo apiInfo() {
- ApiInfo apiInfo = new ApiInfoBuilder().title("xxx接口文档").termsOfServiceUrl("http://swagger.io/")
- .contact(new Contact("lequal", "www.www.www", "www@qq.com")).description("暂时没有描述").version("0.0.1Apah").build();
- return apiInfo;
- }
-
- /**
- * @Author: lequal
- * @Description 添加放行资源
- * @Date 2022/7/28 0028 10:28
- * @Param [registry]
- * @return void
- */
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
- registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
- registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
- registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
- }
- }
注意:
整个工程如果需要做任何与MVC相关的配置,推荐都统一实现 WebMvcConfigurer 接口来实现;而不是A配置类使用继承 WebMvcConfigurationSupport
(或者继承WebMvcConfigurerAdapter,但是该类已经标记为废弃)方式,
到了B配置类又换成了实现 WebMvcConfigurer 接口来做。这两者同时使用有可能导致拦截器失效。
1 WebMvcConfigurerAdapter 是 WebMvcConfigurer 的实现类大部分为空方法 (由于Java8中可以使用 default 关键字为接口添加默认方法,所以在源代码中spring5.0之后就已经弃用本类) 如果需要我接着可以实现 WebMvcConfigurer 接口。 2 WebMvcConfigurationSupport 是 mvc 的基本实现并包含了 WebMvcConfigurer 接口中的方法 3 WebMvcAutoConfiguration 是 mvc 的自动装在类并部分包含了 WebMvcConfigurer 接口中的方法 4 如果在 springboot 项目中没有使用到以上类,那么会自动启用 WebMvcAutoConfiguration 类做自动加载;项目中的配置都是默认的,比如静态资源文件的访问
1 重写 WebMvcConfigurationSupport 后 SpringBoot 自动配置失效 2 @EnableWebMvc 实现原理实际上是导入了 DelegatingWebMvcConfiguration 配置类,等价于 @Configuration + 继承该类 3 引用了 @EnableWebMVC 注解,就会往spring容器中注入了一个 DelegatingWebMvcConfiguration 来统一管理所有的配置类
- 0 springboot 自动配置类 -> WebMvcAutoConfiguration(包括 内部的配置类:WebMvcAutoConfigurationAdapter#addResourceHandlers 等)
- 1 实现 WebMvcConfigurer: 不会覆盖 WebMvcAutoConfiguration 的配置
- 2 实现 WebMvcConfigurer + 注解 @EnableWebMvc:会覆盖 WebMvcAutoConfiguration 的配置
- 3 (推荐)继承 DelegatingWebMvcConfiguration:会覆盖 WebMvcAutoConfiguration 的配置
- 4 继承 WebMvcConfigurationSupport:会覆盖 WebMvcAutoConfiguration 的配置
====================================
另外附上我的pom.xml
然后就可以访问了
访问地址:http://localhost:8089/swagger-ui.html
后面会更新一篇新版本Springboot配置Swagger(Knife4j)的完整配置教程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。