有时候前端向后端发送请求,可能是一个数组,下面这种格式:
{
data:[
{...},
{...},
{...},
...
]
}
go-zero默认是处理不了的,我们必须自定义Handler,才能接收这样的参数,例如以下代码:
func CustomHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
req := &mytypes.CustomReq{}
//1、从body中读取数据
reader, err := io.ReadAll(r.Body)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
//2、从body中读取数据转换结构体
err = json.Unmarshal(reader, req)
if err != nil {
logx.Error(fmt.Sprintf("json转换成结构体失败 : %s,需要转换的结构体:%+v", err.Error(), req))
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := mypackage.NewCustomLogic(r.Context(), svcCtx)
resp, err := l.Custom(req)
if err != nil {
httpx.OkJsonCtx(r.Context(), w, resp)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}