gpt4 book ai didi

json - 如何在响应正文中单独设置错误代码和编码 json?

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:47 27 4
gpt4 key购买 nike

在我的应用程序中,当出现错误时,我在响应主体上写了一条 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com