springBoot集成knife4jAggregation
前言
业务需要,最近尝试集成knife4j,遇到了诸多404异常以及Knife4j文档请求异常,这里讲一下怎么解决这些问题以及我对为什么会出现问题的理解。
组件版本 knife4j-aggregation-spring-boot-starter 2.0.9 knife4j-micro-spring-boot-starter 2.0.9(swagger3.0可不加) springfox-boot-starter 3.0 spring-boot 2.5.4
一、404
出现404说明配置上肯定存在问题,或者包引入有误 在确认包无误后加上
@SpringBootApplication public class SwaggerBootstrapUiDemoApplication implements WebMvcConfigurer{ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //注意官网有介绍使用classpath* 或 classpath 两个都试一试 //笔者配置classpath* 无效 classpath能正常访问 registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } }
二、Knife4j文档请求异常
此处配置稍有问题,就可能产生这个错误,所以先上配置,再解释
knife4j: enableAggregation: true nacos: enable: true #你的nacos地址 serviceUrl: http://my.nacosaddress.com/nacos routes: - name: 服务1 serviceName: server1 location: /server1/v3/api-docs?group=default servicePath: / namespaceId: local - name: 服务2 serviceName: server2 location: /server1/v3/api-docs?group=default swaggerVersion: 2.0 servicePath: /server1 namespaceId: local
location: 服务的swagger地址 填写前试试能不能直接访问,尽量不要使用v2版本,该版本获取的json格式可能存在异常
例如 youhost:8080/server1/v3/api-docs?group=default, 如果get请求不能返回json格式文档,则检查下该服务swagger配置是否正常
servicePath: 这个配置与vue有关,不同服务之间不要用同一个地址就行,否则可能出现某个服务无法获取swagger数据
namespaceId: 该配置与nacos相关,如果你的nacos中配置了多个空间(默认public),但是你的服务却注册在test,这将导致你拿不到服务数据,也无法获取swagger的文档信息了
最后一点: 如果你的nacos上注册了多个同名服务,knife4j默认取第一个,但是这个服务恰好你访问不到。。。 你懂的
总结
按理说挺简单的一个东西,差不多花了一天的时间来搞,期间无数次重启改配置。 再就是下载的demo与文档中介绍不一致,例如文档中没有提到需要 knife4j-micro-spring-boot-starter , demo中却使用了,让我们这些搭建报错的人心里摇摆不定, 这到底是加了会导致异常,还是不加会导致异常… 头大