Gin框架踩坑——[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 200
這個報錯場景為 : 1.Gin框架、2.編寫POST請求方式接口、3.使用結構體綁定方式接受參數
該坑現象為 : 當結構體綁定參數失敗時(即參數有誤、傳錯時),httpcode為400,無論開發者如何強制返回httpcode,code就是400
原因 : 行為 – 這些方法MustBindWith在引擎蓋下使用。如果存在綁定錯誤,則請求被中止c.AbortWithError(400, err).SetType(ErrorTypeBind)。這將響應狀態碼設置為400,並將Content-Type標題設置為text/plain; charset=utf-8。請注意,如果在此之后嘗試設置響應代碼,將會導致警告[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 422。如果您希望更好地控制行為,請考慮使用ShouldBind等效的方法。
解決方法 : 綁定結構體的方法一概不適用【BindJSON】改為【ShouldBind】
//接收json數據形式 param := make(map[string]interface{}) err := c.ShouldBind(¶m) if err != nil { panic(&errs.JsonFromatError) } photoV, _ := param["photo"].(string) //接口類型轉字符串 photoValue := util.PhotoBase64Start(photoV)