RTMP推流协议互联网直播/点播云服务平台EasyDSS报Field validation for 'xxxx' failed on the 'required' tag错误解决方法

这几天我们的研发人员在EasyDSS前端调用后端接口获取目录接口时,出现Error:Field validation for ‘OnlyNextLayer’ failed on the ‘required’ tag"错误。具体返回错误如下图所示:

返回数据类型为 400,代表请求错误。但是检验前端发送数据是完全正确的。以上窗口,运行几秒后,自动退出。

原因分析
查看后台,发现后台报错如下:

然后查看该接口对应的源代码,源代码如下。

// 获取子目录
type VodGetChildrenDir struct {
   // id
   ID string `form:"id" json:"id" binding:"required"`
   // 是否仅查询下一层数据
   OnlyNextLayer bool `form:"onlyNextLayer" json:"onlyNextLayer" binding:"required"`
}

在 onlyNextLayer 中添加了 binding:“required” 这个配置,代表该字段为必须传递的字段,如果未查找到该字段则报错。模拟前端请求,请求脚本如下:

### 获取目录的子目录信息
POST http://localhost:10080/v1/vodDir/getChildren
Accept: */*
Cache-Control: no-cache
Content-Type: application/json

{
  "id": "OjPM1U5MR",
  "onlyNextLayer": false
}

在请求参数中确实传递了 onlyNextLayer 参数,但是仍然会报以上错误。因此阅读官方文档代码,查看代码逻辑,在代码中定义的数据为,如果将前端的数据赋值给后台VodGetChildrenDir后,数据中的OnlyNextLayer如果仍然是原始字段,就认为该参数没有传递。
因此 binding:“required” 这个参数代表的真实意义为:必须存在这个字段,并且这个字段不能为初始值,如字符串不能为初始值“”,布尔类型的值不能为初始值false,数字类型的值不能为初始值0。

解决方案

根据代码逻辑分析,该 required 可以去除,不会影响数据出现问题。因此代码如下

// 获取子目录
type VodGetChildrenDir struct {
   // required 代表此字段不可以省略,并且不能为""、0、false等
   // id
   ID string `form:"id" json:"id" binding:"required"`
   // 是否仅查询下一层数据
   OnlyNextLayer bool `form:"onlyNextLayer" json:"onlyNextLayer"`
}

修改代码,重新启动,前端发送相同的数据,可获取到对应的数据。

EasyDSS支持Flash、HTML5播放,兼容Windows、Android、iOS、Mac等操作系统,转码、上传一体化设计,使音视频资源转码后可立即面向互联网进行发布。大家如果还想了解更多EasyDSS视频平台相关内容,欢迎联系我们咨询了解,EasyDSS提供试用版本给大家测试,欢迎大家下载!

原文地址:https://www.cnblogs.com/easydss/p/13886243.html