Cómo obtener el JSON del cuerpo de una solicitud en marcha
Soy un novato con Go, pero hasta ahora me gusta mucho.
Tengo un problema que no puedo resolver. Estoy migrando una API de Node to Go y existe este registro donde tengo que capturar el cuerpo de una POSTCOMO ESTÁN LAS COSAS y guardarlo en unjsonb
escriba la columna en una base de datos Postgresql.
Esto significa que no puedo usar unstruct
o cualquier cosa predeterminada.
El POST está hecho con cuerpo crudoContent-Type: application/json
al igual que:
{
"debug": false,
"order_id_gea": 326064,
"increment_id_gea": 200436102,
"date": "2017-05-18T01:44:44+00:00",
"total_amount": 10000.00,
"currency": "MXN",
"payment_method": "Referencia bancaria",
"reference": "857374",
"buyer": {
"buyer_id_gea": 1234,
"full_name": "Juan Perez Martinez",
"email": "[email protected]",
"phone": "5512341234"
},
"products": [
{
"sku":"PEP16114",
"price": 10000.00,
"currency": "MXN",
"student": {
"school_id_gea": 172,
"grade_id_gea": 119,
"level_id_gea": 36,
"name": "Benancio",
"last_name": "Perez",
"second_last_name": "Garcia",
"email": "[email protected]"
}
}
]
}
En Nodo + Hapi es bastante simple:
const payload = request.payload
y luego puedo acceder al JSON desdepayload
.
Estoy usando Go with Echo, así quecontext
es un contenedor donde puedo encontrarRequest() *http.Request
.
He intentado lo siguiente, pero cada vez que el resultado está vacío o es un error porque está vacío:
var v interface{}
err := json.NewDecoder(context.Request().Body).Decode(&v)
if err != nil {
return result, err
}
fmt.Println(v)
Resultado: EOF
-
m := echo.Map{}
if err := context.Bind(&m); err != nil {
return result, err
}
fmt.Println(m)
Código de resultado 400, mensaje EOF
-
body, error := ioutil.ReadAll(context.Request().Body)
if error != nil {
return result, error
}
fmt.Println(body)
Resultado []
-
¿Qué me estoy perdiendo y / o haciendo mal? ¡Gracias!