如何在golang中使用“422 Unprocessable Entity(WebDAV)”或任何其他自定义http状态代码

时间:2013-12-12 15:48:33

标签: http go

go http包仅支持来自RFC 2616的状态代码。许多REST apis如github使用422来输入错误的输入数据。我也想这样做,但我没有看到这样做的好方法。我看到的选项是

  1. 将源代码编辑到http包并添加它。这很容易做,但编辑核心库会很糟糕。

  2. http.Response结构将Status作为字符串StatusCode作为int。我想我可以在响应中设置它们,但http.Handler只有一个RespnseWriter接口。有可能创建一个具有正确设置响应的RoundTripper的http.Transport。即使有可能,这似乎在某种程度上也是一种hacky。

  3. 那么添加自定义http状态代码的最佳方法是什么,或者只是一个坏主意?

2 个答案:

答案 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是文档中此功能的链接。