Golang не выдает ошибку при декодировании тела "{}" в struct - PullRequest
0 голосов
/ 13 сентября 2018

В api rest, когда тело установлено в "{}", декодер json не выдаст ошибку.Это заставляет проверить, является ли целевая структура все еще nil.

. Мне нужно проверить, должна ли библиотека работать так, или это проблема с ней.

// Client Side this request
req, err := http.NewRequest("POST", "url", strings.NewReader("{}") )

// Curl equivalent: 
curl -X POST -d '{}' http://api:8080/r/primitives/multiply

// Server side
type Operands struct {
    Values []float64 `json:"Values"`
}

func handler(req *http.Request, res *http.Response) (string, error) {
    operands := Operands{}
    err := json.NewDecoder(req.Body).Decode(&operands)
    if err != nil {
        res.StatusCode = 400
        res.Status = http.StatusText(res.StatusCode)
        http.StatusText(res.StatusCode)
        return "", err
    }
     operands.Values[0] // It will fail here.
}

Редактировать 1: Декодер работает нормально с пустым телом "" с генерируемой ошибкой и отлично работает с правильным телом, подобным этому: {"Values" : [ 5.0 , 2.0 ]} Редактировать 2: Проблема здесь в том, что с "{}"body, он не вернет ошибку при декодировании, вместо этого он сохранит целевую структуру как nil.

1 Ответ

0 голосов
/ 13 сентября 2018

{} - это просто пустой объект Json, и он будет прекрасно декодироваться в вашу Operands структуру, поскольку структура не обязана иметь что-либо в массиве Operands.

Вы должны подтвердить это самостоятельно, например,

err := json.NewDecoder(req.Body).Decode(&operands)
if err != nil || len(operands.Values) == 0{
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...