Post 请求 Golang API 发送 JSON 和字符串化 JSON

Post request to Golang API to send JSON and stringy-fied JSON

在向 Golang API 发出 POST 请求时,如果我发送字符串化 JSON 数据 returns 成功,但是当我发送 JSON returns 数据错误 status 403.

请帮助我理解这种行为以及如何使用 POST 请求方法发送 JSON 数据。

文件:main.go

package main

import (
    "devmgmtv2/auth"
    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "log"
    "net/http"
)

func main() {
    router := mux.NewRouter()
    auth.AuthInit(router)
    ssid.SsidInit(router)
    headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
    originsOk := handlers.AllowedOrigins([]string{"*"})
    methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
    router.HandleFunc("/auth/login", Login).Methods("POST", "OPTIONS")
    log.Fatal(http.ListenAndServe(":8000", handlers.CORS(headersOk, originsOk, methodsOk)(router)))
}

func Login(w http.ResponseWriter, r *http.Request) {
    //Create User Struct
    var user User
    json.NewDecoder(r.Body).Decode(&user)
    userPassword := getUserPassword(user.User)
    // call get value for that user
    // check for equality if true, return the structure
    // if false return error
    if user.Password == userPassword {
        w.Header().Set("Content-Type", "text/plain")
        w.Write([]byte("success"))
    } else {
        http.Error(w, "Forbidden", http.StatusForbidden)
    }
}

向任何 http 服务器发送 JSON 时,您始终必须使用 JSON.stringify()

不这样做会导致发送 [object Object]... 有一些客户端库可以为您完成这种繁重的工作,但在幕后 JSON 始终作为字符串发送。


Node.JS 以相同的方式处理它...它接收字符串表示形式,通常在传入请求中 运行 之类的正文解析器从字符串中提取 JSON .所以它可能发生在幕后,但它仍然发生。