Spring Boot整合Knife4j-3.0.3
文章目录
- Spring Boot整合Knife4j-3.0.3
- 1. 引言
- 2. 快捷的解决方案
- 2.1 修改knife4j的依赖
- 2.2 application.yml增加配置
- 3.3 `SwaggerConfig`配置如下
Spring Boot整合Knife4j-3.0.3
1. 引言
前面我写过一篇关于整合knife4j的文档 Spring Boot整合Knife4j-2.0.7
(图片来源网络,侵删)最近我引入redission的时候莫名其妙的抛出异常:
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
原因:
springboot的版本和Springfox-Swagge的版本不兼容
2. 快捷的解决方案
2.1 修改knife4j的依赖
knife4j依赖
com.github.xiaoymin knife4j-spring-boot-starter 3.0.3
springboot版本
org.springframework.boot spring-boot-starter-parent 2.7.5
2.2 application.yml增加配置
spring: mvc: pathmatch: matching-strategy: ANT_PATH_MATCHER
这个不能少,否则接口html页面显示不出来
3.3 SwaggerConfig配置如下
package com.jiayuan.common.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; import com.jiayuan.common.constant.Constant; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.ReflectionUtils; import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ApiKey; import springfox.documentation.service.SecurityScheme; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; import java.lang.reflect.Field; import java.util.List; import java.util.stream.Collectors; import static com.google.common.collect.Lists.newArrayList; /** * Swagger配置 * * @author xmc */ @Configuration @EnableSwagger2 @AllArgsConstructor @EnableKnife4j public class SwaggerConfig { private final OpenApiExtensionResolver openApiExtensionResolver; @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //加了ApiOperation注解的类,生成接口文档 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //包下的类,生成接口文档 //.apis(RequestHandlerSelectors.basePackage("com.jiayuan.modules.job.controller")) .paths(PathSelectors.any()) .build() .extensions(openApiExtensionResolver.buildExtensions("criticalVal-management-system")) .directModelSubstitute(java.util.Date.class, String.class) .securitySchemes(security()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("危急值管理系统") .description("cvms-api文档") .version("1.0") .build(); } private List security() { return newArrayList( new ApiKey(Constant.TOKEN_HEADER, Constant.TOKEN_HEADER, "header") ); } @Bean public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { return new BeanPostProcessor() { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); } return bean; } private void customizeSpringfoxHandlerMappings(List mappings) { List copy = mappings.stream() .filter(mapping -> mapping.getPatternParser() == null) .collect(Collectors.toList()); mappings.clear(); mappings.addAll(copy); } @SuppressWarnings("unchecked") private List getHandlerMappings(Object bean) { try { Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); field.setAccessible(true); return (List) field.get(bean); } catch (IllegalArgumentException | IllegalAccessException e) { throw new IllegalStateException(e); } } }; } }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!