• beego使用API自动化文档生成swagger时,routers目录下无法生成commentsRouter_controllers.go文件


    今天项目生成swagger时,按照官方文档操作,swagger目录和压缩包都正常创建,就连http://localhost:8080/swagger/也正常访问,但是 Try it out 接口时,就 404 报错,百度说是因为commentsRouter_controllers.go(下面简称:路由文件)没有的原因。一看发现项目确实没有生成这个文件。。。。。于是耗费半天的时间才搞定,有点坑。。。。。。

    1、先说项目环境:

    无法生成路由文件的项目环境:

    go1.16 、beegov2@v2.0.2 、bee@v2.0.2

    成功生成路由文件的项目环境:

    go1.16 、beegov2@v2.0.1 、bee@v2.0.1

    看到这里应该就知道了,就是beego的版本造成的!!!

    (具体原因还没有时间去验证,感觉是因为 go版本 和 beego版本之间的原因,如果你现在是 go1.18版本,那就可以试一试beego2.0.2、bee2.0.2和beego2.0.4、bee2.0.4)

    2、beego版本解决

    1. GOPATH环境变量下github.com目录中,把 beego 给删除;(不放心可以复制一份到桌面)

    2. cmd,执行 go get github.com/beego/beego/v2@v2.0.1

    3. 下载成功在github.com目录中会重新创建 beego 目录,里面的版本就是2.0.1了

    4. 上github下载bee@v2.0.1版本;GitHub - beego/bee at v2.0.1

    5. 下载bee压缩包,放到和 beego 同级目录中

    6. 打开cmd,进入bee目录路径,执行 go build 进行编译
    7. 报错的话,是因为没有 go.sum 文件,执行 go mod tidy 即可
    8. 继续执行 go build 成功,会生成一个 bee.exe 程序,复制到 GOPATH 的bin目录下
    9. 打开cmd,执行 bee version 就可以看到当前的bee版本了
    10. 如果提示没有 bee 命令,就需要把 bee.exe 再复制一份到 GOROOT 下的 bin 中

    3、通过上面的步骤,版本就集齐了

     此时项目中go.mod用的beego版本还是v2.0.2的,那么就要改项目版本了(不懂什么原因,我在项目路径下执行 go mod tidy 时,一直默认下载 beegov2.0.2 的给我,离谱到家了)

    1. 将项目的 go.mod 和 go.sum 文件都删除(不放心可以复制一份到桌面)
    2. 执行 go mod init productmatrix,生成 go.mod 文件
    3. ( 或者自己创建一个文件即可,在文件go.mod中添加 replace ,如下: 
      1. module productmatrix
      2. go 1.16
      3. // replace 指定使用依赖版本,否则执行 go mod tidy 会默认安装 v2.0.2 的给我
      4. replace github.com/beego/beego/v2 => github.com/beego/beego/v2 v2.0.1
    4. 然后执行 go mod tidy 生成 go.sum 文件,查看sum文件,beego版本如下就是正确的
      1. github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE=
      2. github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI=
    5. 在 app.conf 文件中将 runmode 配置为 dev ,(重要,否则 bee run 无法生成路由文件)
    6. 到这里执行 bee run -gendoc=true -downdoc=true 就可以了,看到 routers 目录下面终于生成路由文件了;

    4、下面就是生成 swagger 文档的步骤了

    1. 在 app.conf 文件中添加 EnableDocs = true
      1. appname = productmatrix
      2. httpport = 8080
      3. runmode = "${RUNMODE||dev}"
      4. autorender = false
      5. EnableDocs = true
    2. 在 router.go 中创建路由规则
      1. // @APIVersion 1.0.0
      2. // @Title matrix API
      3. // @Description server api document
      4. // @Contact XXXX
      5. package routers
      6. import (
      7. "productmatrix/controllers"
      8. beego "github.com/beego/beego/v2/server/web"
      9. )
      10. func init() {
      11. ns1 := beego.NewNamespace("/v1",
      12. beego.NSNamespace("/thirdparty",
      13. beego.NSInclude(
      14. &controllers.ThirdpartyController{},
      15. ),
      16. ),
      17. )
      18. beego.AddNamespace(ns1)
      19. }
    3. 在 main.go 的 main() 方法中添加如下:( _ "productmatrix/routers" 是生成路由文件必须添加的) 
      1. package main
      2. import (
      3. _ "productmatrix/routers"
      4. beego "github.com/beego/beego/v2/server/web"
      5. )
      6. func main() {
      7. // 生成接口文档
      8. if beego.BConfig.RunMode == "dev" {
      9. beego.BConfig.WebConfig.DirectoryIndex = true
      10. beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
      11. }
      12. beego.Run()
      13. }
    4. 在ThirdpartyController中定义方法和swagger注解就可以了
      1. package controllers
      2. import (
      3. "encoding/json"
      4. "productmatrix/errors"
      5. "productmatrix/models"
      6. beego "github.com/beego/beego/v2/server/web"
      7. "github.com/beego/beego/v2/core/logs"
      8. )
      9. type ThirdpartyController struct {
      10. beego.Controller
      11. }
      12. // @Title getLicenseSubmitForm
      13. // @Description 许可新增接口
      14. // @Param body body models.LicenseReq true "许可新增DTO"
      15. // @Success 200 {object} models.ResponseDTO
      16. // @Failure 500 Server Exception
      17. // @router /license/request [post]
      18. func (c *ThirdpartyController) LicenseSubmitForm() {
      19. licenseReq := models.LicenseReq{}
      20. if err := json.Unmarshal(c.Ctx.Input.RequestBody, &licenseReq); err != nil {
      21. logs.Error(err)
      22. c.ReturnError(errors.NewRuntimeError(err, "7003"))
      23. }
      24. if err := models.LicenseSubmitForms(licenseReq); err != nil {
      25. c.ReturnError(errors.NewRuntimeError(err, "7002"))
      26. }
      27. c.ReturnSuccess("license request successfully")
      28. }
      29. // @Title getLicenseSubmitFormList
      30. // @Description 许可查询接口
      31. // @Success 200 {object} models.ResponseDTO
      32. // @Failure 500 Server Exception
      33. // @router /license/list [get]
      34. func (c *ThirdpartyController) LicenseSubmitFormList() {
      35. c.ReturnSuccess("successfully")
      36. }
    5. 最后,访问http://localhost:8080/swagger/就可以看到接口文档了。

    欢迎大家评论和提问,一起交流学习。

  • 相关阅读:
    7、python中的异常处理
    操作系统中文件系统的实现和分配方式探析(上)
    MFC与Qt常见窗体、控件对比
    Camera | 5.Linux v4l2架构(基于rk3568)
    Mysql基础篇(约束)
    H5关闭当前页面,包括微信浏览器
    深度学习中的熵、交叉熵、相对熵(KL散度)、极大释然估计之间的联系与区别
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的移动端农副产品销售平台实现的App[包运行成功]计算机毕业设计安卓项目源码
    FreeRTOS中断与任务之间同步(Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,422 )
    springboot3使用pagehelper使用报错
  • 原文地址:https://blog.csdn.net/LagerSwan/article/details/126526969