在REST API开发中, 将json转结构体时错误的处理方式的疑问

litgh · 2024-06-06 09:40:28 · 880 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2024-06-06 09:40:28 的主题,其中的信息可能已经有所发展或是发生改变。

疑问

当我们解析json请求体时, 前端可能不会严格按照实体对象的类型来传递,比如表form单中某个字段,

接口参数对象定义的是int, 但前端绑定到js参数时可能自动获取的空字符串,

这个时候后台json解析时就会返回err: cannot unmarshal string into Go struct field xx of type int, 但不会阻止其它字段的解析.

type Body {
    xxID int `json:"xxId"`
    ...
}
form: {
    xxId: ''
}

<input v-model="form.xxId" />

比如我用gin来开发REST API时,

err := c.ShouldBindBodyWithJSON(&body)

当input没有输入值, 提交的json是空字符串 {"xxId": ""}, 一般场景下这类空值""或null值, 当逻辑上没有必填要求时, 是可以忽略的.

疑问

那我在后台应该怎么处理这类异常. 因为除了这种类型转换异常可能还有其它异常会影响业务逻辑, 所以不能忽略这个err

也没法要求前端严格按照参数类型来传递参数值,这样前端要一个字段一个字段来处理类型, 不现实

请问各位现在流行的处理方式是怎么样的?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

880 次点击  
加入收藏 微博
2 回复  |  直到 2024-06-11 09:17:12
xwszt
xwszt · #1 · 10月之前

在tag里加上omitempty,这样空值就会忽略掉

litgh
litgh · #2 · 10月之前

这上只针对没有传key或null值, 如果传递了空字符串, 还是会被解析

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传