向web.go框架中编写的web api发送POST请求中的json
Im使用web.go()编写一个简单的web应用程序,在POST请求中接受json,并在解析后返回结果。我在从ctx.Params对象读取json时遇到问题。 下面是我到目前为止的代码向web.go框架中编写的web api发送POST请求中的json,go,Go,Im使用web.go()编写一个简单的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.Par
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")
}
虽然post请求已注册,但我在命令行中没有看到我发布的json的任何内容。我怎样才能解决这个问题
谢谢您没有从POST请求主体中获取任何JSON数据的原因是
hoisie/web
将表单数据读入.Params
,如图所示:
为了解决这个问题,您需要添加一些东西来解析响应的原始主体。您应该能够使用ctx.Body
来访问原始Body,因为它实现了*http.Request
,并且不会在上下文中重新定义Body
例如,这应该起作用:
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`
您应该使用fmt.Printf
打印上下文的值(println
是一个特殊的内置函数)。至于打印JSON:返回string(mapD)
不会将其打印到命令行。它将把它写入HTTP响应。您应该在浏览器中访问0.0.0.0:9999/
。decoder:=json.NewDecoder(ctx.Request.Body);
mp:=make(map[string]string);
decoder.Decode(mp)
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`