在前后端大行其道的时代,项目不引入swagger都out了。花了一下午把swagger集成到项目中,并定义了接口信息,然而UI界面看着很不爽,看着一定都不专业。
knife4j
knife4j是springfox-swagger的增强UI实现,为Java开发者在使用Swagger的时候,能拥有一份简洁、强大的接口文档体验。
简书浏览时看到一大牛介绍knife4j,觉得效果不错,决定把项目升级到knife4j。
首先引入POM:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.1</version>
<exclusions>
<exclusion>
<groupId>io.springfox</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
这里排除io.springfox和io.swagger两个包主要时为了防止jar包依赖冲突,前面已经引用了swagger-starter。
然后修改配置:
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
// ... 这里省略 swagger api 基础配置信息
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
可以看到修改配置的主要目的时添加新的静态资源,保证springmvc会到指定资源目录加载knife4j 的前端资源文件。
最后将新增加的资源路径配置为可匿名访问,这里使用的是shiro安全框架,具体配置如下:
chain.put("/doc.html", "anon");
chain.put("/swagger-ui.html", "anon");
最后验证下效果:
虽然有点简单,但还是有点小成就。
坑
- 在测试时,knife4j测试结果不更新
- 使用代理时最近了一级目录,首页地址正常,但是测试接口不能自动追加。