将标头添加到ResponseWriter

时间:2016-09-01 13:56:18

标签: go

我尝试为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中编写的第一段代码(或者更确切地说,是复制/粘贴/改编)。

1 个答案:

答案 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)
}