博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go Revel - Results(响应)
阅读量:5253 次
发布时间:2019-06-14

本文共 1989 字,大约阅读时间需要 6 分钟。

每个`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() }

转载于:https://www.cnblogs.com/hangxin1940/p/3269146.html

你可能感兴趣的文章
(25)Teach girls bravery, not perfection
查看>>
一些常用的标签丨直接代码
查看>>
实验四(数组)
查看>>
函数之装饰器
查看>>
spring + redis 实现数据的缓存
查看>>
How to change @INC to find Perl modules in non-standard locations
查看>>
io与nio的区别
查看>>
Light OJ 1116
查看>>
跟着iMX28x开发套件学linux-05
查看>>
RHEL 5 安装gcc
查看>>
building tool
查看>>
spring配置文件没有错,但是出现红叉的解决方法
查看>>
设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
查看>>
Ubuntu16.04安装MySQLdb
查看>>
《分布式系统原理与范型》习题答案 4.命名
查看>>
接口和抽象类有什么区别
查看>>
犯犯错
查看>>
新硬盘挂载目录后文件消失解决办法
查看>>
Qt 5.2 Creator 和 vs2012 QT 插件的安装
查看>>
Ambiguous reference to member 'dataTask(with:completionHandle:)'错误
查看>>