我正在使用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是路線。我只是將基本路徑附加到每個鍵。
- 1 回答
- 0 關注
- 181 瀏覽
添加回答
舉報
0/150
提交
取消