私は 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
ゴーレストのドキュメントで、私が見つけた唯一の例は次のとおりです。
posted gorest.EndPoint method:"POST" path:"/post/" postdata:"User"
func(serv HelloService) Posted(posted User)
しかし、カスタム構造体を作成しようとしても、上記と同じアンマーシャリング エラーで失敗しました。
type MyStruct struct {
key,json string
}
誰かが私が使用すべきデータ型を教えてもらえますか?