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中却使用了,让我们这些搭建报错的人心里摇摆不定, 这到底是加了会导致异常,还是不加会导致异常… 头大

经验分享 程序员 微信小程序 职场和发展