2

OpenAPI Generator创建遵循一般模式的 API 函数:

func (api *MyAPI) OperationId(context.Context) (ResponseStruct, *http.Response, error)

如何在出错时检索 HTTP 正文?但是,当 HTTP 状态代码是错误时,它error不包含正文,并且由于正文已被读取nil,因此也不包含正文。*http.Response并且,错误不会作为成功和失败定义解组到 ResponseStruct 中。是不同的。

4

1 回答 1

1

生成的客户端创建一个mypackage.GenericOpenAPIError结构体,该结构体以 . 形式返回error,其中mypackage是客户端的包名。它将 HTTP 错误正文存储在GenericOpenAPIError.body该函数可以访问的属性中Body() []byte。但是,由于函数定义返回一个error不支持该Body()函数的错误,因此需要先转换错误,然后才能访问它。

这是从生成的客户端创建错误的代码:

if localVarHttpResponse.StatusCode >= 300 {
    newErr := GenericOpenAPIError{
        body:  localVarBody,
        error: localVarHttpResponse.Status,
    }

要访问 body 属性,需要强制转换错误。例如:

data, resp, err := myclient.MyAPI.OperationId(context.Background())
if err != nil && resp.StatusCode >= 300 {
    openAPIErr := err.(mypackage.GenericOpenAPIError)
    fmt.Println(string(openAPIErr.Body()))
}

由于需要在生成的客户端包中将其解码为结构,因此将其作为辅助函数添加到客户端包中会很有用。

于 2019-08-05T04:01:41.377 回答