在我的应用程序中,当出现错误时,我在响应主体上写了一条 json 错误消息,但这使得响应代码为 200。我尝试单独执行
json.NewEncoder(res).Encode(errorBody)
res.WriteHeader(http.StatusBadRequest)
但它仍然给出响应代码 200 以及我正在进行多个 WriteHeader 调用的警告。我想要类似的东西
http.Error(res,"Some Error Message here",http.StatusBadRequest)
但我希望它不是文本格式的错误消息,而是 JSON 格式。我该怎么办?
最佳答案
可以先写header再写body。
res.Header().Set("Content-Type", "application/json; charset=utf-8")
res.WriteHeader(http.StatusBadRequest)
if err = json.NewEncoder(res).Encode(err); err != nil {
// handle encoder error
}
如果响应仍然是 200
和/或您收到警告,这意味着您或您使用的某些包正在其他地方为您编写 header 。
更新:(回答评论中的相关问题)
json.NewEncoder(res).Encode(err)
调用res
上的Write
方法,Write的实现标准
会自动将状态设置为 net/http
包中的 200
(如果尚未设置)。 WriteHeader
的实现检查状态是否已经设置,如果是,它只是记录警告和保释,而不是覆盖它。
因此,如果您不想控制状态,您需要在写入响应之前调用 WriteHeader
,无论您是使用编码器编写 json 还是调用 res.Write
你自己。
关于json - 如何在响应正文中单独设置错误代码和编码 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43362621/