Api golang中单阵列的多响应
我是刚来戈朗的。我想得到我的回答作为多重结果。我有一些方法,但我需要改变Api golang中单阵列的多响应,api,go,response,go-gin,Api,Go,Response,Go Gin,我是刚来戈朗的。我想得到我的回答作为多重结果。我有一些方法,但我需要改变 impartErrl := ph.profileService.ValidateSchema(gojsonschema.NewStringLoader(string(b))) if impartErrl != nil { ctx.JSON(http.StatusBadRequest, impart.ErrorResponse(impartErrl)) retu
impartErrl := ph.profileService.ValidateSchema(gojsonschema.NewStringLoader(string(b)))
if impartErrl != nil {
ctx.JSON(http.StatusBadRequest, impart.ErrorResponse(impartErrl))
return
}
现在我得到的输出是
[
{
"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"
}
]
但我需要我的回应
{
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"
}
}
我怎样才能得到这些类型的响应?因为在ios应用程序中解析响应[]时显示错误。所以我需要改变输出
请帮助我。函数
错误响应
应该返回映射[int]错误
,而不是[]错误
。例如:
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
}
因此,
ErrorResponse
应该返回一个map[int32]错误,而不是[]错误
?我要检查两件事:1)在封送前,encoding/json
对映射的键进行排序,如果没有,2)出现在自然排序顺序之外的键不会破坏“ios应用程序”。我之所以提到这一点,是因为在Go中,映射遍历并不能保证其键的访问顺序。@Matteo使用它,我得到了所需的输出。@Matteo非常感谢您
type Error interface {
error
HttpStatus() int
ToJson() string
Err() error
Msg() string
}
[
{
"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"
}
]
{
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"
}
}
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
}