Go Revel - Results(响应)

本文介绍了Revel Web框架中处理HTTP响应的方法,包括渲染模板、序列化JSON/XML、重定向等,并展示了如何自定义响应结果及调整状态码。
每个`Action`必须返回一个`revel.Result`实例,用来处理响应。它遵循了简单的接口: type Result interface { Apply(req *Request, resp *Response) } `revel.Controller`提供了一些方法来生成`Results`响应: 1、`Render`, `RenderTemplate` - 渲染模板, 传递参数 2、`RenderJson`, `RenderXml` - 将一个`struct`序列化为`json`或`xml`格式 3、`RenderText` - 返回一个纯文本响应 4、`Redirect` - 重定向到另一个`action`或URL 5、`RenderFile` - 返回一个文件, 一般作为一个附件下载 6、`RenderError` - 渲染`errors/500.html`模板来返回一个500状态 7、`NotFound` - 渲染`errors/404.html`模板来返回一个404状态 8、`Todo` - 返回一个存根响应 (500) 除此之外,开发人员还可以返回自己定义的`revel.Result` **设置状态码与返回体** 每一个内建的`Result`都有默认的状态码与返回体,如果要手动改变,只需要简单的覆盖`response`中的属性即可: func (c App) Action() revel.Result { c.Response.Status = http.StatusTeapot c.Response.ContentType = "application/dishware" return c.Render() } ##Render(渲染器) 在一个`action`内调用(如,`Controller.Action`)。`mvc.Controller.Render`可以做如下两件事: 1、将所有参数添加至controller的`RenderArgs`,并将它们的本地标识设置为key 2、渲染模板`views/Controller/Action.html`, 并将`RenderArgs`作为一个map传递 如果不成功,比如没找到模板,它会返回一个`ErrorResult`对象。 func (c MyApp) Action() revel.Result { myValue := calculateValue() return c.Render(myValue) } 上面示例将`myValue`传递至模板。 revel需要根据调用者的方法名来确定模板的路径与参数,因此`c.Render()`只能在Action中调用。 ##渲染 Json / Xml 程序可以通过传递任意Go类型来调用`RenderJson`或`RenderXml`,revel将通过`json.Marshal`或`xml.Marshal`来渲染。 如果`app.conf`中的`results.pretty=true`被定义,则将使用`MarshalIndent`进行序列化,以惨生更好的缩进供人阅读。 ##Redirect(重定向) revel提供了一下两种方式来进行重定向: 1、不传递参数来重定向至一个action return c.Redirect(Hotels.Settings) 这种方式十分有用,它提供一定程度的类型安全与独立路由(会自动的生成URL) 2、使用一个格式化字符串重定向 return c.Redirect("/hotels/%d/settings", hotelId) 这种形式必须传递参数 它会返回一个302(临时重定向)状态码 ##添加自定义Result 下面的示例演示如何创建一个自定义`Result` 创建如下类型: type Html string func (r Html) Apply(req *Request, resp *Response) { resp.WriteHeader(http.StatusOK, "text/html") resp.Out.Write([]byte(r)) } 并在action中使用: func (c *App) Action() revel.Result { return Html("Hello World") } ##状态码 没一个`Result`都具有默认的状态码,可以很方便的更改它: func (c *App) CreateEntity() revel.Result { c.Response.Status = 201 return c.Render() }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值