go gin框架解析json

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(&param)
if err != nil {
    panic(&errs.JsonFromatError)
}
photoV, _ := param["photo"].(string) //接口类型转字符串
photoValue := util.PhotoBase64Start(photoV)

 

posted on   星河赵  阅读(1113)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2018-12-28 Python多线程与多线程中join()的用法

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示