2015-10-20 4 views
-1

Я использую Postman для размещения строки json на localhost. JSON строка, И переходящая в Почтальон:Request Body is null in Go lang (Postman)

{ 
    “name”: "foo" 
} 

Однако, когда я получить данные в моей тестовой функции, то req.Body я получить что-то вроде этого: &{%!s(*io.LimitedReader=&{0xc0820142a0 0}) <nil> %!s(*bufio.Reader=<nil>) %!s(bool=false) %!s(bool=true) {%!s(int32=0) %!s(uint32=0)} %!s(bool=true) %!s(bool=false) %!s(bool=false)}

Я хочу, чтобы получить имя: Foo в орган запроса.

Мой идти языки код то же:

import (
    "encoding/json" 
    "fmt" 
    "net/http" 
) 

type Input struct { 
    Name string `json:"name"` 
} 


func test(rw http.ResponseWriter, req *http.Request) { 
    var t Input 
    json.NewDecoder(req.Body).Decode(&t) 
    fmt.Fprintf(rw, "%s\n", req.Body) 
} 

func main() { 
    http.HandleFunc("/test", test) 
    http.ListenAndServe(":8080", nil) 
} 

Может кто-нибудь сказать мне, почему я получаю пустые данные в атрибуте req.Body? Большое спасибо.

+1

Вы должны напечатать 't' not' req.Body' и ** please **: обрабатывать каждую ошибку. – Volker

+0

@Volker: Я пробовал это. Печать t дает мне пустое '{}'. Ничего внутри: ( –

+0

Как вы напечатали 't'? Как' '% s", t.name' или '"% # v ", t'. Вывод" {} "кажется странным и обрабатывает каждую ошибку. – Volker

ответ

2

Тело Reuqes должно быть пустым, потому что вы уже прочитали все от него. Но это не проблема.
Из вашего вопроса, то, кажется, ваш вклад не является допустимым JSON (у вас есть « который отличается с ").
Decode метод вернет ошибку, вы должны проверить, что.

if err := json.NewDecoder(req.Body).Decode(&t); err != nil { 
    fmt.Println(err) 
} 
+0

Этот метод декодирования не возвратил никакой ошибки, но отлично работал с кодом, который вы предложили. Я все еще удивляюсь, что здесь играет роль переменная err. Любое понимание было бы оценено. спасибо большое :) –

+0

Не магия, как вы думаете. Если ошибка не возвращается (err == nil), то успех декодирования. В вашем случае, когда 't' variale empty, должна быть какая-то ошибка! – nvcnvn