我尝试为this issue提供修正,并尝试了与this类似的内容,但无论我尝试设置什么标头,我都没有看到它我试图修改的http响应。
This是我尝试更改的方法,这是我尝试添加的行:
w.Header().Set("Content-Type", "application/json")
。
完整的方法:
func (s *HTTPServer) getServices(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(s.list.GetAllServices()); err != nil {
log.Println("Error encoding: ", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
我希望标题可以更改,但始终为text/plain; charset=utf-8
免责声明:这是我在Go中编写的第一段代码(或者更确切地说,是复制/粘贴/改编)。
答案 0 :(得分:1)
如果有人遇到此问题,下一个信息可能会有所帮助。
无效的原因是在尝试添加内容类型标头之前写出了状态代码。
要使其工作,应在调用w.WriteHeader(状态代码)之前添加所有标头。 例如:
w.Header().Add("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
encoder := json.NewEncoder(w)
encoder.SetEscapeHTML(false)
if err := encoder.Encode(s.list.GetAllServices()); err != nil {
panic(err)
}