# #go
Вопрос:
Я пытаюсь проверить тело запроса в соответствии с этой структурой с помощью валидатора. Но в Postman он всегда выдает ошибку при проверке структуры. Я просто хочу, чтобы при отправке запроса требовались все значения.
package model
type User struct {
FeatureName string `json:"featureName" validate:"required"`
Email string `json:"email" validate:"required"`
CanAccess *bool `json:"can_access" validate:"required"`
}
Я попытался отправить это в качестве тела запроса на почтальона:
// Request body
{
"featureName": "crypto",
"email": "test5@gmail.com",
"can_access": true
}
// Response body
{
"status": 422,
"message": "Missing parameters featureName/can_access/email"
}
Код:
package controller
import (
"database/sql"
"encoding/json"
"errors"
"net/http"
"unicode/utf8"
"github.com/yudhiesh/api/model"
"gopkg.in/validator.v2"
"github.com/yudhiesh/api/config"
)
func InsertFeature(w http.ResponseWriter, r *http.Request) {
var user model.User
var response model.Response
db := config.Connect()
defer db.Close()
// Decode body into user struct
if err := json.NewDecoder(r.Body).Decode(amp;user); err != nil {
response.Message = "Error"
response.Status = http.StatusInternalServerError
json.NewEncoder(w).Encode(response)
return
} else {
// Validate struct to check if all fields are correct
// Fails here!
if err := validator.Validate(user); err != nil {
response.Message = "Missing parameters featureName/can_access/email"
response.Status = http.StatusUnprocessableEntity
json.NewEncoder(w).Encode(response)
return
} else {
// Execute insert statement to database
stmt := `INSERT INTO features (user_id, feature_name, can_access) SELECT id, ?, ? FROM users WHERE email=?`
if _, err = db.Exec(stmt, amp;user.FeatureName, amp;user.CanAccess, amp;user.Email); err != nil {
response.Message = "Error"
response.Status = http.StatusInternalServerError
json.NewEncoder(w).Encode(response)
return
} else {
response.Message = "Success"
response.Status = http.StatusOK
json.NewEncoder(w).Encode(response)
return
}
}
}
}
Комментарии:
1.Я вижу проблему в вашем коде, ссылка, которой вы поделились, есть
https://github.com/go-playground/validator
, но в коде импортgopkg.in/validator.v2
, поэтому, если вы используете валидатор go-playground, создайте новый экземпляр валидатора и проверьте. т. е.;validatorInstance:=validator.New()
validatorInstance.Struct(user)
2. @Key_coder Ах да, это сработало, пожалуйста, добавьте ответ, и я приму его!
Ответ №1:
Перемещение комментария в ответ
Я вижу проблему в вашем коде, ссылка, которой вы поделились, есть https://github.com/go-playground/validator
, но в коде импорт gopkg.in/validator.v2
, если вы go-playground validator
используете приведенный ниже код для проверки
import https://github.com/go-playground/validator
validatorInstance:=validator.New()
validatorInstance.Struct(user)