我試圖用go-json-rest創建RESTful API中細末JSON的REST:JSON有效載荷爲空
我有這個模型的結構:
type Todo struct {
id int
name string
}
,我試圖做一個POST請求創建Todo
類型的對象:
func CreateTodo(w rest.ResponseWriter, r *rest.Request) {
body, _ := ioutil.ReadAll(r.Body)
log.Println("body content is: ", string(body)) // here I can see {"name": "test1"}
var todo Todo = Todo{}
err := r.DecodeJsonPayload(&todo) // here the error shows JSON payload is empty
defer r.Body.Close()
if err != nil {
log.Println("error in parsing json")
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if todo.name == "" {
rest.Error(w, "todo name is required", 400)
return
}
lock.Lock()
var nextId int = len(todos)
// todos[nextId] = todo
todo.id = nextId // set its id
todos = append(todos, todo)
log.Println("num of todos: ", len(todos))
lock.Unlock()
w.WriteJson(&todo)
}
然而,在郵遞員客戶端的控制檯上,該錯誤表明:
{
"Error": "JSON payload is empty"
}
我想知道哪裏可能出問題。由於
編輯: 這不應被視爲重複的問題,因爲我也不試圖用json
包做JSON對象編組/解組。相反,我使用rest.Request
對象(內置go-json-rest)來解碼從客戶端發佈的json參數。
在這個問題上多挖掘和搜索之後,我發現下面的解決我的問題這樣的回答:
body, _ := ioutil.ReadAll(r.Body)
會消耗一切從 請求主體。所以刪除這一行後,json解析工作!
大寫struct字段名稱'id'和'name'。 –
這不是一個重複的問題。看到我上面的編輯 – TonyGW