https://japidocs.agilestudio.cn/#/
https://github.com/YeDaxia/JApiDocs
以上缺点如果能够接收或者能通过开发能力去解决,那么可以继续往下看。
在父级module或者底层公共module中添加依赖:
<dependency>
<groupId>io.github.yedaxiagroupId>
<artifactId>japidocsartifactId>
<version>1.4.3version>
dependency>
在controller或者distribution层增加配置生成类:
/**
* japi文档生成初始化配置
*
* @author tino
* @date 2020/8/31
*/
public class JApiDocsInitialization {
/**
* JApi run test
*
* @param args
*/
public static void main(String[] args) {
initialize();
}
/**
* 自动生成api文档
*/
public static void initialize() {
DocsConfig config = new DocsConfig();
String projectPath = System.getProperty("user.dir");
config.setProjectPath(projectPath); // 项目根目录
config.setProjectName("sa-dmc-api-doc"); // 项目名称
config.setApiVersion(""); // 声明该API的版本
// config.setDocsPath(projectPath + "/distribution/workshop-server/src/main/resources/static/apidoc"); // 生成API 文档所在目录
config.setDocsPath(ClassUtils.getDefaultClassLoader().getResource("static/apidoc").getPath()); // 生成API 文档所在目录
config.setAutoGenerate(Boolean.TRUE); // 配置自动生成
Docs.buildHtmlDocs(config); // 执行生成文档
}
}
在resource下增加static/apidoc目录,执行代码,生成的文档就在此处,浏览器打开 static/apidoc/index.html查看文档效果,新建apidoc目录时为了区别于其他静态资源,还为了方便添加拦截器白名单。
如果需要使用域名+端口访问静态资源,还需要如下操作:
1.在 application.yml中增加:
spring:
resources:
static-locations: classpath:/static/
2.如果有登录拦截器又不需要登录访问文档,那么需要在拦截器白名单中增加"/apidoc/*""白名单。
3.(非必须)这个时候通过
http://localhost:端口/apidoc/index.html
还是不能访问文档起始页(404或者被登录拦截),那么可能是你的项目在配置中存在
@EnableWebMvc
通常使用了统一返回处理advice的会开启此配置,这个时候你需要在WebMvcConfigurer的实现中覆写addResourceHandlers方法使静态资源能够被访问。
/**
* 登录拦截
*
* @author tino
* @date 2020/4/13
*/
@Configuration
@EnableWebMvc
public class InterceptorConfig extends WebConfiguration implements WebMvcConfigurer {
/**
* 由于@EnableWebMvc注解导致的,原因大致是 @EnableWebMvc 引入了 WebMvcConfigurationSupport,spring就跳过springboot的 WebMvcAutoConfiguration,
* 使得springboot没有扫描到 src/main/resources/static这些静态资源
* 所以这里重写 重写addResourceHandlers方法,添加静态资源路径
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/", "classpath:/templates/");
super.addResourceHandlers(registry);
}
}
如果想在启动时生成api文档,需要在启动类中增加:
public static void main(String[] args) {
SpringApplication.run(this.getClass(), args);
// 启动时重新生成api文档
JApiDocsInitialization.initialize();
}
启动项目,访问 http://localhost:端口/apidoc/index.html ,api文档就在眼前。
1.生成时进行到某个controller的时候后报空指针异常,原因是japi无法映射集合类型的聚合返回对象,你需要对接口的返回类型进行规范,最好是明确的对象,如果不想使用对象,那么需要你通过@ApiDoc自定义api文档,这样就不会报错:
/**
* 获取聚合数据
*
* @param startDate
* @param endDate
* @return
*/
@ApiDoc(result = ArrayList.class, url = "getCount", method = "get")
@GetMapping("/getCount")
public List<Map<String, Object>> getCount(@RequestParam String startDate, @RequestParam String endDate) {
return cardStatisticsService.getCount(startDate, endDate);
}
2.发布到服务器上时无法访问静态资源——两种解决方式,1)本地生成文档到static/apidoc下,推到git远端,发布时打包即可;2)调整生成文档的生成路径为线上服务映射的跟域名下。