go http包仅支持来自RFC 2616的状态代码。许多REST apis如github使用422来输入错误的输入数据。我也想这样做,但我没有看到这样做的好方法。我看到的选项是
将源代码编辑到http包并添加它。这很容易做,但编辑核心库会很糟糕。
http.Response结构将Status作为字符串StatusCode作为int。我想我可以在响应中设置它们,但http.Handler只有一个RespnseWriter接口。有可能创建一个具有正确设置响应的RoundTripper的http.Transport。即使有可能,这似乎在某种程度上也是一种hacky。
那么添加自定义http状态代码的最佳方法是什么,或者只是一个坏主意?
答案 0 :(得分:2)
由于状态422 Unprocessable Entity
是WebDAV扩展,您可以使用包golang.org/x/net/webdav
并正确处理它:
http.Error(w,
webdav.StatusText(webdav.StatusUnprocessableEntity),
webdav.StatusUnprocessableEntity)
答案 1 :(得分:0)
您可以手动插入状态代码作为http.Error()
的参数:
func Handler(w http.ResponseWriter, req *http.Request) {
http.Error(w, "Some Response Text", 422)
return
}
这将返回状态422和响应“Some Response Text”
Here是文档中此功能的链接。