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

litgh · · 686 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## 疑问 当我们解析json请求体时, 前端可能不会严格按照实体对象的类型来传递,比如表form单中某个字段, 接口参数对象定义的是int, 但前端绑定到js参数时可能自动获取的空字符串, 这个时候后台json解析时就会返回err: `cannot unmarshal string into Go struct field xx of type int`, 但不会阻止其它字段的解析. ```go type Body { xxID int `json:"xxId"` ... } ``` ```js form: { xxId: '' } <input v-model="form.xxId" /> ``` 比如我用gin来开发REST API时, ```go err := c.ShouldBindBodyWithJSON(&body) ``` 当input没有输入值, 提交的json是空字符串 `{"xxId": ""}`, 一般场景下这类空值`""`或null值, 当逻辑上没有必填要求时, 是可以忽略的. ## 疑问 那我在后台应该怎么处理这类异常. 因为除了这种类型转换异常可能还有其它异常会影响业务逻辑, 所以不能忽略这个`err` 也没法要求前端严格按照参数类型来传递参数值,这样前端要一个字段一个字段来处理类型, 不现实 请问各位现在流行的处理方式是怎么样的?

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

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

686 次点击  
加入收藏 微博
2 回复  |  直到 2024-06-11 09:17:12
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传