为了账号安全,请及时绑定邮箱和手机立即绑定

Echo Groups 无法使用 oapi-codegen 处理 OpenAPI 生成的代码

Echo Groups 无法使用 oapi-codegen 处理 OpenAPI 生成的代码

Go
婷婷同学_ 2022-10-17 10:12:46
我正在使用oapi-codegen生成我的服务器代码并使用 Echo Labstack 作为服务器。当我传递一个Group实例Openapi.RegisterHandlers而不是一个实例时,对于该组中的任何请求Echo,我总是会收到 400 错误:{"message":"no matching operation was found"}    swagger, err := Openapi.GetSwagger()    if err != nil {        fmt.Fprintf(os.Stderr, "Error loading swagger spec\n: %s", err)        os.Exit(1)    }    // Use oapi validation middleware to check all requests against the    // OpenAPI schema.    g := e.Group("/api", middleware.OapiRequestValidator(swagger))    Openapi.RegisterHandlers(g, &MyApi{})如果发送请求/api/foo,foo生成的服务器代码中定义的 API 端点在哪里,我会收到 400 错误。如果我这样做,/api/<some undefined api>我也会得到 400。如果我确实发送请求/baz,我会按预期得到 404,因为这不是定义的路线。如果我没有将前缀传递给Group(),每个请求都会收到 400 错误。如果我使用,我会得到相同的行为RegisterHandlersWithBaseURL()
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

似乎有一个错误,如果您指定一个基本路径,无论是对Group()函数还是对RegisterHandlersWithBaseURL(),OapiRequestValidator在检查路由的请求路径时,中间会忽略基本路径。它使用 OpenAPI 规范中定义的路由,没有基本路径。为了解决这个问题,我重写了inline.tmpl模板并修改了GetSwagger()函数以将其包含在底部:


func GetSwagger(pathPrefix string) (swagger *openapi3.T, err error) {

...

    var updatedPaths openapi3.Paths = make(openapi3.Paths)


    for key, value := range(swagger.Paths) {

        updatedPaths[pathPrefix + key] = value

    }


    swagger.Paths = updatedPaths

}

地图中的关键Path是路线。我只是将基本路径附加到每个键。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信