如何解决golang中单个数组的多重响应
我是 golang 的新手。我想得到我的回应作为多个结果。我做了一些方法,但我需要改变那个
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
}
现在我得到的输出为
[
{
"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","key": "email"
},1 : {
"error": "unable to complete the request","msg": "invalid screen name,must be alphanumeric characters only","key": "screen_name"
}
}
我怎样才能得到这些类型的响应。 ?因为在 ios 应用程序中解析响应 [] 显示错误。所以我需要改变输出。
请帮帮我。
解决方法
ErrorResponse
函数应该返回一个 map[int]Error
而不是 []Error
。例如:
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。