Как не допустить пустых полей при отмене сортировки JSON в структуре - PullRequest
0 голосов
/ 05 июля 2019

У меня есть эта структура для моего запроса

type RequestBody struct {
    ForkliftID  string `json:"forklift_id"`
    WarehouseID string `json:"warehouse_id,omitempty"`
    TaskID      string `json:"task_id"`
}

Если я не отправлю "forklift_id" в теле запроса json, unmarshalling присваивает "" без возврата ошибки, мне интересно, есть личто-то наподобие

`json: "forklift_id,notempty"`

, поэтому немаршаллинг возвращает ошибку, если поле отсутствует или пусто.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Я предполагаю, что вы сделали (рассматривая пустое значение из полезной нагрузки как ошибку) для проверки http-запроса.Тогда я думаю, что вы можете пойти с ответом @colminator или попробовать использовать стороннюю библиотеку, которая предназначена для этого конкретного случая, например, как https://github.com/go-playground/validator

Пример использования:

type RequestBody struct {
    ForkliftID  string `json:"forklift_id"  validate:"required"`
    WarehouseID string `json:"warehouse_id" validate:"required"`
    TaskID      string `json:"task_id"`
}

// ...

var payload RequestBody 

// ...

validate := validator.New()
err := validate.Struct(payload)
if err != nil {
    // handle the error
}

поле с тегом validate:"required" будет проверено во время validate.Struct() вызова.Существует также множество полезных правил проверки, отличных от required.

. Для более подробного примера взгляните на пример исходного кода


Другоеальтернативное решение было бы путем выполнения явных проверок в этих полях структуры.Пример:

// ...

if payload.ForkliftID == "" {
     err = fmt.Errorf("Forklift ID cannot be empty")
}
if payload.WarehouseID == "" {
     err = fmt.Errorf("Warehouse ID cannot be empty")
}
1 голос
/ 05 июля 2019

Измените тип поля на *String.После демаршалинга, если значение равно nil, то вы знаете, что поле JSON не было предоставлено.

См. здесь для более подробного примера проверки демаршалирования ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...