亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號