简体   繁体   English

Golang GORM并将HTTP.Request.Body解码为JSON

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

I am trying to decode a json request (handled with gorilla/mux) into a struct and save it with GORM into a mysql database. 我正在尝试将json请求(使用gorilla / mux处理)解码为结构并将其与GORM一起保存到mysql数据库中。 I send the request with curl (see the cURL command). 我用curl发送请求(参见cURL命令)。 The request is invalid and should fail at 2 points 1) It should not decode into the struct 2) It should not be saved to the database. 请求无效,应该在2点失败1)它不应该解码到结构2)它不应该保存到数据库。 I am not sure what I am doing wrong and would appreciate help :) 我不确定我做错了什么,并希望得到帮助:)

The decoded struct looks like this: 解码后的结构如下所示:

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

cURL command: cURL命令:

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

Code: 码:

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
}

The request is valid JSON, so you won't get a JSON error. 该请求是有效的JSON,因此您不会收到JSON错误。 If the zero value for your struct is allowed by the schema, that's also valid, so you won't get an error from gorm. 如果架构允许结构的零值,那么它也是有效的,因此您不会从gorm中获得错误。 By all measures you're using, your input is valid. 通过您正在使用的所有措施,您的输入是有效的。 If you want additional validation, you'll have to write it into your handler. 如果您想要进行额外的验证,则必须将其写入处理程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM