我正在 Go 中构建 JSON API,我想以 json 形式返回错误响应。
响应示例:
{
"error": "Invalid request syntax"
}
我认为我可以创建一个实现错误接口的包装结构,然后使用 Go 的 json 封送拆收器作为获取错误的 json 表示的干净方法:
type JsonErr struct {
Err error `json:"error"`
}
func (t JsonErr) Error() string {
return t.Err.Error()
}
这只会将 JsonErr 编组为{"error":{}}
,有没有办法使用默认的 Go json 封送拆收器来编码此结构,或者我是否需要为 JsonErr 结构编写一个快速的自定义 MarshalJson ?
只需实施json.Marshaler http://golang.org/pkg/encoding/json/#Marshaler界面:
func main() {
var err error = JsonErr{errors.New("expected")}
json.NewEncoder(os.Stdout).Encode(err)
}
type JsonErr struct {
error
}
func (t JsonErr) MarshalJSON() ([]byte, error) {
return []byte(`{"error": "` + t.Error() + `"}`), nil
}
它不起作用的原因是因为json.Marshal
没有对错误接口的检测,并且大多数错误类型没有导出字段,因此反射无法显示这些字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)