我们可以对WebServer
指定的状态码进行自定义处理,例如针对常见的404/403/500
等错误,我们可以展示自定义的错误信息、页面内容,或者跳转到一个特定的页面。
相关方法如下:
func (s *Server) BindStatusHandler(status int, handler HandlerFunc)
func (s *Server) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc)
func (d *Domain) BindStatusHandler(status int, handler HandlerFunc)
func (d *Domain) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc)
可以看到,我们可以使用BindStatusHandler
或者BindStatusHandlerMap
来实现针对指定的状态码进行自定义的回调函数处理,并且该特性也支持针对特定的域名绑定。我们来看几个简单的示例。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request){
r.Response.Writeln("halo 世界!")
})
s.BindStatusHandler(404, func(r *ghttp.Request){
r.Response.Writeln("This is customized 404 page")
})
s.SetPort(8199)
s.Run()
}
执行后,我们访问没有绑定的路由页面,例如 http://127.0.0.1:8199/test ,可以看到,页面显示了我们期望的返回结果:This is customized 404 page
。
此外,常见的Web页面请求错误状态码处理方式,是引导用户跳转到指定的错误页面,因此,在状态码回调处理函数中,我们可以使用r.RedirectTo
方法来进行页面跳转,示例如下:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/status/:status", func(r *ghttp.Request) {
r.Response.Write("woops, status ", r.Get("status"), " found")
})
s.BindStatusHandler(404, func(r *ghttp.Request){
r.Response.RedirectTo("/status/404")
})
s.SetPort(8199)
s.Run()
}
执行后,我们手动通过浏览器访问一个不存在的页面,例如 http://127.0.0.1:8199/test ,可以看到,页面被引导跳转到了 http://127.0.0.1:8199/status/404 页面,并且可以看到页面返回内容:woops, status 404 found
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindStatusHandlerByMap(map[int]ghttp.HandlerFunc {
403 : func(r *ghttp.Request){r.Response.Writeln("403")},
404 : func(r *ghttp.Request){r.Response.Writeln("404")},
500 : func(r *ghttp.Request){r.Response.Writeln("500")},
})
s.SetPort(8199)
s.Run()
}
可以看到,我们可以通过BindStatusHandlerByMap
方法对需要自定义的状态码进行批量设置。该示例程序执行后,当服务接口返回的状态码为403/404/500
时,接口将会返回对应的状态码数字。
在自定义状态码处理方法中如果涉及到内容的输出,往往需要使用r.Response.ClearBuffer()
方法将原本缓冲区的输出内容清空。
Tornado使用三个记录器流:tornado.access:Tornado的HTTP服务器(以及可能在future中的其他服务器)的每个请求日志记录...
您可能之前阅读过,您可以设置默认的Response Status Code。但在某些情况下,您需要返回与默认值不同的状态代码。用例例如,假设...
在 Flask 中处理文件上传非常简单。它需要一个 HTML 表单,其 enctype 属性设置为“multipart/form-data”,将文件发布...
基于web的应用程序通常需要具有向用户/客户端发送邮件的功能。Flask-Mail扩展使得与任何电子邮件服务器建立简单的接口变得非常容...
ALLOWED_HOSTS 配置在运行测试时被验证。这允许测试客户端区分内部和外部 URL。支持多租户或根据请求的主机改变业务逻辑的项...
Java Swing教程 -Java Swing JProgressBarJProgressBar用于显示任务的进度。它有一个方向,可以是水平或垂直。JProgressBar有三...
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!『 与其纠结,不如行动学习。Innovate ,And o...
注意版本要求:3.4.0版本以上MybatisPlusInterceptor该插件是核心插件,目前代理了Executor#query和Executor#update和S...
resultMap元素是MyBatis中最重要最强大的元素。它可以让你从90%的JDBCResultSets数据提取代码中解放出来,并在一些情形下...
映射类型当你准备一个 Hibernate 映射文件时,我们已经看到你把 Java 数据类型映射到了 RDBMS 数据格式。在映射文件中已经声明被...