当我们在使用Spring MVC写接口的时候,为了生成API文档,为了方便整合Swagger,都是用这个SpringFox的这套封装。但是,自从2.9.2版本更新之后,就一直没有什么动静,也没有更上Spring Boot的大潮流,有一段时间还一直都是写个配置类来为项目添加文档配置的。为此,之前就造了这么个轮子:
也没什么难度,就是造的早,所以得到了不少Star。现在SpringFox出了一个starter,看了一下功能,虽然还不完美,但相较于之前我们自己的轮子来说还是好蛮多的。来看看这个版本有些什么亮点:
Spring 5,Webflux 支持(仅请求映射支持,尚不支持功能端点)
Spring Integration 支持
Spring Boot 支持 springfox-boot-starter 依赖性(零配置,自动配置支持)
具有自动完成功能的文档化配置属性
更好的规范兼容性
支持 OpenApi 3.0.3
几乎零依赖性(唯一需要的库是 spring-plugin、pswagger-core)
现有的 swagger2 注释将继续有效,并丰富 open API 3.0 规范
对于这次的更新,我觉得比较突出的几点:Webflux的支持,目前的轮子就没有做到;对OpenApi 3的支持;以及对Swagger 2的兼容(可以比较方便的做升级了)。
错误行代码:
Cause by:
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
错误原因:Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher
解决方案:
1.简单粗暴:升级spring-boot-starter-parent版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
2.高级感:在application.yaml里配置:spring.mvc.pathmatch.matching-strategy: ANT_PATH_MATCHER
spring: mvc: pathmatch: matching-strategy: ant_path_matcher
接下来进入主题:上手
第一步导入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
第二步在主启动类开启支持
文章来源:https://www.toymoban.com/news/detail-435786.html
访问http://localhost:8080/doc.html即可 默认ui就是bootstarp-ui。文章来源地址https://www.toymoban.com/news/detail-435786.html
可以添加自定义设置
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包下的controller生成api文档
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
//设置文档信息
return new ApiInfoBuilder()
.title("小7接口文档")
.description("小7接口文档")
.contact(new Contact("李佳琪", "http:localhost:8080/doc.html",
"1004102689@qq.com"))
.version("1.0")
.build();
}
/**
* 解决swagger在springboot2.7以后的空指针异常
*/
@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 <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
List<T> copy = mappings.stream()
.filter(mapping -> mapping.getPatternParser() == null).toList();
mappings.clear();
mappings.addAll(copy);
}
@SuppressWarnings("unchecked")
private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
try {
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
assert field != null;
field.setAccessible(true);
return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
};
}
}
到了这里,关于springboot生成接口文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!