我使用web.go(http://webgo.io/)编写一个简单的Web应用程序,在POST请求中接受json,在解析后返回结果。我无法从ctx.Params对象中读取json。 以下是我到目前为止的代码
package main
import (
"github.com/hoisie/web";
"encoding/json"
)
func parse(ctx *web.Context, val string) string {
for k,v := range ctx.Params {
println(k, v)
}
//Testing json parsing
mapB := map[string]int{"apple": 5, "lettuce": 7}
mapD, _ := json.Marshal(mapB)
return string(mapD)
}
func main() {
web.Post("/(.*)", parse)
web.Run("0.0.0.0:9999")
}
虽然帖子请求已经注册,但我没有看到在我发布的json的命令行上打印的任何内容。我该如何解决这个问题?
谢谢
答案 0 :(得分:1)
您没有从POST请求正文中获取任何JSON数据的原因是因为hoisie/web
将表单数据读入.Params
,如here所示:
req.ParseForm()
if len(req.Form) > 0 {
for k, v := range req.Form {
ctx.Params[k] = v[0]
}
}
为了解决这个问题,你需要添加一些可以解析响应原始主体的东西。您应该能够使用ctx.Body
来访问原始正文,因为它实现了*http.Request
并且未在Body
结构中重新定义Context
。
例如,这应该有效:
json := make(map[string]interface{})
body, err := ioutil.ReadAll(ctx.Body)
if err != nil {
// Handle Body read error
return
}
err = json.Unmarshal(body, &json)
if err != nil {
// Handle JSON parsing error
return
}
// Use `json`