這幾天我們的研發人員在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提供試用版本給大家測試,歡迎大家下載!