我很新,所以請原諒我,如果這是愚蠢的明顯。我應該在我的POST請求中使用哪種類型的gorest?
我正在嘗試將表單發佈到使用gorest編寫的Go中的REST API。我已經使用GET成功地完成了這項工作,但是我無法獲取POST數據來解析地圖。這裏是我的Go代碼
gotest.go:
package main
import (
"code.google.com/p/gorest"
"net/http"
"fmt"
)
func main() {
gorest.RegisterService(new(HelloService)) //Register our service
http.Handle("/",gorest.Handle())
http.ListenAndServe(":8787",nil)
}
//Service Definition
type HelloService struct {
gorest.RestService `root:"/api/"`
save gorest.EndPoint `method:"POST" path:"/save/" output:"string" postdata:"map[string]string"`
}
func(serv HelloService) Save(PostData map[string]string) {
fmt.Println(PostData)
}
而且我真棒HTML表單:
<form method="POST" action="http://127.0.0.1:8787/api/save/">
key: <input type="text" name="key" /><br />
json: <input type="text" name="json" /><br />
<input type="submit" />
</form>
我認爲會變成我的職務數據轉換成我可以訪問一個很好的地圖。我填寫表格,點擊提交,並返回一個錯誤:
Error Unmarshalling data using application/json. Client sent incompetible data format in entity. (invalid character 'k' looking for beginning of value)
編輯:由於greggory.hz指出,該計劃似乎認爲POST數據是JSON。這個錯誤是因爲json必須以大括號,括號或引號開頭。
如果map[string]string
與string
它打印以下的bash的終端在那裏我遇到這樣的:
key=arst&json=%7B%27arst%27%3A%27arst%27%7D
在這一點,我能找到去其他文檔唯一的例子是:
posted gorest.EndPoint method:"POST" path:"/post/" postdata:"User"
func(serv HelloService) Posted(posted User)
但我嘗試創建一個自定義結構也失敗了與上面看到相同的解組錯誤。
type MyStruct struct {
key,json string
}
有人可以告訴我我應該使用什麼樣的數據類型嗎?
我主要猜這裏是因爲我不熟悉gorest具體,但我相信它試圖解析POST數據作爲JSON的整體,而不僅僅是使用JSON鍵關聯的值。 也就是說,我相信它除了發佈請求中的所有數據被格式化爲JSON。 – gregghz
更具體地說:key = arst&json =%7B%27arst%27%3A%27arst%27%7D無效JSON。 – gregghz
字符串'key = arst&json =%7B%27arst%27%3A%27arst%27%7D'看起來像一個URL變量路徑。嘗試避免使用字符串(http://golang.org/pkg/net/url/#QueryUnescape)。這個錯誤聽起來像是試圖解開「密鑰」一詞。 – Intermernet