有没有觉的 swagger2 注解难用的,用注释生成文档不好么?

2020-09-14 09:16:11 +08:00
 Rogeryxx

接口开始使用 Swagger2 生成文档,每个 Controller 都要配一堆注解生成文档,繁琐重复。就比如我写了如下的 Controller:

@Api(tags = "学生接口")
@RestController
@RequestMapping("web/v1/student")
public class StudentController {

    @ApiOperation("根据编号获取学生信息")
    @ApiImplicitParams(
            @ApiImplicitParam(name = "stu_no", value = "学生编号"))
    @GetMapping("getByNo")
    public StudentVO getByNO(@RequestParam("stu_no") String stuNo) {
        StudentVO stu = new StudentVO();
        stu.setStuNo(stuNo);
        stu.setName("张三");
        return stu;
    }
    
    @ApiOperation("添加学生信息")
    @ApiImplicitParams(
        {
            @ApiImplicitParam(name = "name", value = "学生名称", defaultValue = "张三"),
            @ApiImplicitParam(name = "no", value = "学生编号", defaultValue = "std-10001", required = true)
        }
    )
    @PostMapping("add")
    public StudentVO addStudent(String name, String no) {
        StudentVO s = new StudentVO();
        s.setName(name);
        s.setStuNo(no);
        return s;
    }
}

我觉得更简便的方式是通过注释生成文档,就像这样:

/**
 * 学生接口
 */
@RestController
@RequestMapping("web/v1/student")
public class StudentController {
    /**
     * 根据编号获取学生信息
     * @param stuNo 学生编号
     */
    @GetMapping("getByNo")
    public StudentVO getByNO(@RequestParam("stu_no") String stuNo) {
        StudentVO stu = new StudentVO();
        stu.setStuNo(stuNo);
        stu.setName("张三");
        return stu;
    }

    /**
     * 添加学生信息
     * @param name 学生名称|张三
     * @param no   学生编号|required|std-10001
     */
    @PostMapping("add")
    public StudentVO addStudent(String name, String no) {
        StudentVO s = new StudentVO();
        s.setName(name);
        s.setStuNo(no);
        return s;
    }
}

于是我写了个EasySwagger,只需加个@EnableEasySwagger开启功能。原理也简单,通过反射修改DocumentationCache类中的文档信息。

5202 次点击
所在节点    Java
32 条回复
lidlesseye11
2020-09-14 13:34:26 +08:00
我以为一般都是手写 swagger 文档再拿去生成代码(生成的代码应该是和 swagger 没关系的),而不是在代码里写文档去生成 swagger 。。。
(虽然有点儿像鸡生蛋蛋生鸡。。不过这样搞总觉得哪里不对劲儿
z00z
2020-09-14 13:46:50 +08:00
Swagger2 的.NET 版就支持直接根据注释生成接口文档
balabalaguguji
2020-09-14 17:26:40 +08:00
注释写文档比较麻烦,而且还会把代码弄的乱七八糟一堆额外的东西。
可以试下易文档 https://easydoc.xyz 有专门的 API 文档编辑器,方便很多

看个预览效果:www.easydoc.xyz/s/17790664
liujialongstar
2020-09-14 17:39:43 +08:00
@lyusantu 公司有一项考核指标: 千行代码注释, 如果不用 swagger 正好可以刷指标
zzzmh
2020-09-14 17:48:05 +08:00
apidoc 好像可以满足这个需求
jeffh
2020-09-14 17:50:45 +08:00
yapi 就可以注释生成文档啊
Yuicon
2020-09-14 17:57:26 +08:00
文档就是要耦合 离代码越近越好 文档与代码不一致或者同步不自动化才是大问题
jiyingze
2020-09-14 18:33:50 +08:00
无需额外注解的 SpringBoot API 文档生成工具
https://japidocs.agilestudio.cn/#/zh-cn/
静态源代码分析生成文档
lingxi27
2020-09-14 20:49:42 +08:00
swagger 文档>>>代码
ideaa
2020-09-15 09:21:27 +08:00
@cp_api get, /main/index, 获取框架当前版本号
@cp_request t|当前时间|1

php 中我这样实现的,仅支持 GET 请求,地址是 /main/index, 接受当前时间参数 t,不能为空
jokefaker
2020-09-22 18:35:48 +08:00
我也觉得写注释好,比较纯粹。二次开发了一个 restdoc repo,从 javadoc 生成了文档,apidoc 的话也可以,有点学习成本
smartdoc647
2021-07-22 22:43:59 +08:00
spring 技术栈 smart-doc+torna 才是王道

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706737

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX