概要
beego には専用の CLI ツールがありこれを使うとプロジェクトの雛形を作成できます
シリアライズが必要な JSON などのデータはモデルが必要になり bee CLI を使うとその辺りのモデルも簡単に作成してくれます
今回は bee CLI を使ってプロジェクトの作成を行いモデルを使って POST メソッドで JSON を受け取る方法を紹介します
環境
- macOS 11.5.2
- golang 1.17
- beego 2.0.1
bee コマンドのインストール
- go get -u github.com/beego/bee/v2
プロジェクトの作成
- cd $GOPATH/src/github.com/hawksnowlog
- bee new post_test
依存関係の解決
- cd $GOPATH/src/github.com/hawksnowlog/post_test
- go mod tidy
とりあえず動かす
- cd $GOPATH/src/github.com/hawksnowlog/post_test
- bee run
これで localhost:8080 にアクセスして以下の画面が表示されることを確認します
コントローラの編集
デフォルトのコントローラを編集して POST を受け取れるようにしてみます
- cd $GOPATH/src/github.com/hawksnowlog/post_test
- vim controllers/default.go
package controllers
import (
"encoding/json"
beego "github.com/beego/beego/v2/server/web"
)
type MainController struct {
beego.Controller
}
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func (c *MainController) Post() {
var p Person
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &p); err != nil {
c.Ctx.WriteString("json parse error")
return
}
c.Data["json"] = &p
c.ServeJSON()
}
ポイントは Person 構造体を作成する点とそれを使って RequestBody から json.Unmarshal する点です
設定ファイルの修正
Input.RequestBody をコントラーラで参照する場合は config ファイルの変更も必要になります
copyrequestbody = true
を追記します
- cd $GOPATH/src/github.com/hawksnowlog/post_test
- vim conf/app.conf
appname = post_test
httpport = 8080
runmode = dev
copyrequestbody = true
動作確認
これで再度 bee run しましょう
- cd $GOPATH/src/github.com/hawksnowlog/post_test
- bee run
あとは JSON + POST でリクエストするとリクエストした JSON が返却されるのが確認できると思います
-
curl -v -XPOST localhost:8080 -H 'content-type: application/json' -d '{"name":"hawksnowlog","age":100}'
最後に
beego を始める場合は bee new でプロジェクトをちゃんと作成してあげたほうが必要なディレクトリの作成もしてくれるので開発はしやすくなるかなと思います
0 件のコメント:
コメントを投稿