2017-06-14 2 views
0

gorilla/muxで処理されたjsonリクエストを構造体にデコードし、GORMでmysqlデータベースに保存しようとしています。 curlでリクエストを送信します(cURLコマンドを参照)。要求は無効で、2点で失敗するはずです。1)構造体にデコードするべきではありません。2)データベースに保存しないでください。私は私が間違っているのかわからないですし、助けをいただければ幸いです:)Golang GORMとJSONへのHTTP.Request.Bodyのデコード

デコード構造体は次のようになります。

{{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 
} 

答えて

0

要求は有効なJSONであるため、JSONエラーは発生しません。あなたの構造体のゼロ値がスキーマによって許可されている場合、それも有効なので、gormからのエラーは発生しません。使用しているすべての指標によって、あなたの入力は有効です。追加の検証が必要な場合は、ハンドラに書き込む必要があります。

関連する問題