我需要在中间件函数中处理响应数据。假设我有产品处理人员和客户处理人员。产品经理返回产品列表,客户返回客户列表。在中间件功能中,我想将这些响应转换为ApiResponse结构。

type ApiResponse struct{
    Data interface{}
    Status ApiStatus{}
}

func someMiddleware(c *gin.Context){
   //before handlers
   c.Next()
   //I need to access response and manipulate it
   // apiResponse := ApiResponse{}
   // apiResponse.Data = returnedData
   // apiResponse.Status = ApiStatus{}

}

我不想在所有handlerFunction中填充ApiResponse。

最佳答案

可能为时已晚,但无论如何。

最简单的方法通常是使用GetSetgin.Context方法在中间件和处理程序之间传递数据。

但是,如果您确实需要拦截响应,请参阅我关于logging response in gin的答案。唯一的区别是您对截获的响应所做的操作,但是关于截取响应的所有说明均保持不变。

10-06 14:21