go언어
글 수 53
Martini의 기본 router를 사용하면 key-value형식으로 된 POST 데이터는 아주 쉽게 받을 수 있습니다.
하지만 POST 데이터를 JSON 형식으로 보내게 된다면 martini의 기본 router를 사용해서는 값을 받을 수 없습니다.
이럴 땐 다음과 같이 하여 JSON 형식으로 된 POST 데이터를 활용할 수 있습니다.
package main
import (
"github.com/go-martini/martini"
"github.com/martini-contrib/render"
"net/http"
"io/ioutil"
"encoding/json"
)
func main() {
m := martini.Classic()
m.Use(render.Renderer(render.Options{
Layout: "layout",
}))
data := make(map[string]interface{})
data["hello"] = "안녕"
data["world"] = "세계"
data["value"] = 1
m.Get("/", func(r render.Render) {
r.HTML(200, "hello", data)
})
m.Get("/api", func(r render.Render) {
r.JSON(200, data)
})
m.Post("/api", func(req *http.Request, r render.Render, params martini.Params) {
if req.Body != nil {
defer req.Body.Close()
body, err := ioutil.ReadAll(req.Body)
if err != nil {
log.Panic(err)
}
var data interface{}
err = json.Unmarshal(body, &init)
if err != nil {
log.Panic(err)
}
log.Println(data)
}
r.Text(200, "")
})
m.Run()
}

