我对 Go 很陌生,所以如果这很愚蠢,请原谅我。
我正在尝试使用 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 指出的那样,该程序似乎认为发布数据是一个json。此错误是因为 json 必须以大括号、方括号或引号开头。
如果map[string]string
使用string
它将以下内容打印到我正在运行它的 bash 终端:
key=arst&json=%7B%27arst%27%3A%27arst%27%7D
在 go rest 文档中,我能找到的唯一示例是:
posted gorest.EndPoint method:"POST" path:"/post/" postdata:"User"
func(serv HelloService) Posted(posted User)
但是我创建自定义结构的尝试也失败了,出现了上面看到的相同的解组错误。
type MyStruct struct {
key,json string
}
有人可以告诉我应该使用什么数据类型吗?