自定义“Not Found”(404) 使用httprouter处理
使用httprouter库开发API时,处理404(Not Found)回应是一项至关重要的任务。虽然文档提到了手动处理 404 的可能性,但实现自定义处理程序可能具有挑战性。
理解 NotFound 字段
httprouter.Router 结构包含一个名为NotFound,其类型为http.Handler。这意味着 NotFound 的值必须实现 http.Handler 接口中存在的 ServeHTTP 方法。
创建自定义“Not Found”处理程序
定义您自己的处理程序自定义处理程序,您可以创建一个具有与 ServeHTTP 方法匹配的签名的函数:
func MyNotFound(w http.ResponseWriter, r *http.Request) {
// ... Custom handling logic
}
将函数转换为处理程序
要将函数转换为实现 http.Handler 接口的值,您可以使用 http.HandlerFunc() 帮助器函数:
router := httprouter.New()
router.NotFound = http.HandlerFunc(MyNotFound)
手动调用自定义处理程序
如果您希望从其他处理程序中手动调用自定义处理程序,请提供处理程序带有 ResponseWriter 和 *Request:
func ResourceHandler(w http.ResponseWriter, r *http.Request) {
// ... Code to determine resource validity
if !resourceExists {
MyNotFound(w, r) // Manual invocation of custom handler
return
}
// ... Resource exists, serve it normally
}
结论
通过执行以下步骤,您可以在基于 httprouter 的 API 中有效地自定义“未找到”处理流程,确保用户在以下情况下收到适当的响应:尝试访问不存在的资源。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3