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提供試用版本給大家測試,歡迎大家下載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM