簡體   English   中英

Golang GORM並將HTTP.Request.Body解碼為JSON

[英]Golang GORM and Decoding HTTP.Request.Body into JSON

我正在嘗試將json請求(使用gorilla / mux處理)解碼為結構並將其與GORM一起保存到mysql數據庫中。 我用curl發送請求(參見cURL命令)。 請求無效,應該在2點失敗1)它不應該解碼到結構2)它不應該保存到數據庫。 我不確定我做錯了什么,並希望得到幫助:)

解碼后的結構如下所示:

{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC <nil>}   }

cURL命令:

curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:8080/api/dimoengra/subscribe

碼:

package subscribe

import "github.com/jinzhu/gorm"
import "net/http"
import "encoding/json"
import "fmt"

// Subscription ...
type Subscription struct {
  gorm.Model
  ServiceID             string `gorm:"not null" json:"ServiceID"`
  MessageCode           string `gorm:"not null" json:"MessageCode"`
  SubscriberCallbackURL string `gorm:"not null" json:"SubscriberCallbackURL"`
}

// SubscribeHandler ...
func SubscribeHandler(w http.ResponseWriter, r *http.Request, db *gorm.DB) {

fmt.Println("Handle Subscribtion")

if r.Body == nil {
    http.Error(w, "Please send a request body", 400)
    fmt.Println("Empty body")
    return
}

var s Subscription
err := json.NewDecoder(r.Body).Decode(&s)
if err != nil {
    fmt.Println("Error:", err)
    http.Error(w, err.Error(), 400)
    return
}
fmt.Println(s)

err = Subscribe(db, s)
if err != nil {
    fmt.Println("Error:", err)
    http.Error(w, err.Error(), 400)
    return
}

}

// Subscribe ...
func Subscribe(db *gorm.DB, subscription Subscription) error {

err := db.Create(&subscription)
fmt.Println("err:", err.Error)
return err.Error
}

該請求是有效的JSON,因此您不會收到JSON錯誤。 如果架構允許結構的零值,那么它也是有效的,因此您不會從gorm中獲得錯誤。 通過您正在使用的所有措施,您的輸入是有效的。 如果您想要進行額外的驗證,則必須將其寫入處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM