I am new to golang. and I want to get my response as multiple result. I do some method but I need to change that one
impartErrl := ph.profileService.ValidateSchema(gojsonschema.NewStringLoader(string(b)))
if impartErrl != nil {
ctx.JSON(http.StatusBadRequest, impart.ErrorResponse(impartErrl))
return
}
func (ps *profileService) ValidateSchema(document gojsonschema.JSONLoader) (errors []impart.Error) {
result, err := gojsonschema.Validate(ps.schemaValidator, document)
if err != nil {
ps.SugaredLogger.Error(err.Error())
return impart.ErrorResponse(
impart.NewError(impart.ErrBadRequest, "unable to validate schema"),
)
}
if result.Valid() {
return nil
}
// msg := fmt.Sprintf("%v validations errors.\n", len(result.Errors()))
msg := "validations errors"
for i, desc := range result.Errors() {
msg += fmt.Sprintf("%v: %s\n", i, desc)
er := impart.NewError(impart.ErrValidationError, fmt.Sprintf("%s ", desc), impart.ErrorKey(desc.Field()))
errors = append(errors, er)
}
return errors
}
func NewError(err error, msg string, args ...interface{}) Error {
key := GetErrorKey(args...)
return impartError{
err: err,
msg: msg,
key: key,
}
}
func ErrorResponse(err interface{}) []Error {
var errorResponse []Error
switch err.(type) {
case Error:
errorResponse = []Error{err.(Error)}
case []Error:
errorResponse = err.([]Error)
default:
errorResponse = []Error{
NewError(ErrUnknown, fmt.Sprintf("%v", err)),
}
}
return errorResponse
}
type Error interface {
error
HttpStatus() int
ToJson() string
Err() error
Msg() string
}
Now I am getting the output as
[
{
"error": "validation error",
"msg": "email: Does not match format 'email' ",
"key": "email"
},
{
"error": "validation error",
"msg": "screenName: String length must be greater than or equal to 4 ",
"key": "screenName"
}
]
but I require my response as
{
0 :{
"error": "validation error",
"msg": "email: Does not match format 'email' ",
"key": "email"
},
1 : {
"error": "unable to complete the request",
"msg": "invalid screen name, must be alphanumeric characters only",
"key": "screen_name"
}
}
How can I get these type of response. ? because in ios app while parsing the response [] showing error. so I need to change the output.
please help me.
The ErrorResponse
func should return a map[int]Error
instead of []Error
. As Example:
func ErrorResponse(err interface{}) map[int]Error {
errorResponse := map[int]Error{}
switch e := err.(type) {
case Error:
errorResponse[0] = e
case []Error:
for i, k := range e {
errorResponse[i] = k
}
default:
errorResponse[0] = NewError(ErrUnknown, fmt.Sprintf("%v", err))
}
return errorResponse
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.