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

Go Revel - Results(响应)的更多相关文章

  1. OPENCV SVM介绍和自带例子

    依据机器学习算法如何学习数据可分为3类:有监督学习:从有标签的数据学习,得到模型参数,对测试数据正确分类:无监督学习:没有标签,计算机自己寻找输入数据可能的模型:强化学习(reinforcement ...

  2. DRF框架 之基础配置

    Vue框架的总结 """ 1.vue如果控制html 在html中设置挂载点.导入vue.js环境.创建Vue对象与挂载点绑定 2.vue是渐进式js框架 3.vue指令 ...

  3. Django rest_frameword 之项目流程

    后端开发软件目录规范 一.Model from django.db import models # Create your models here. # 多表的设计 # 图书 作者 出版社 作者详情表 ...

  4. DRF框架之视图类

    前后端分离的项目 >: pip3 install djangorestframework   一.视图类传递参数给序列化类 视图层:views.py 需求: (1)在视图类中实列化对象是,可以设 ...

  5. Go Revel 学习指南

    Go Revel 学习指南 CONTROLLERS(控制器) Routing(路由)http://www.cnblogs.com/hangxin1940/p/3267065.html Paramete ...

  6. ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results

    原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...

  7. 来玩Play框架02 响应

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我上一章总结了Play框架的基本使用.这一章里,我将修改和增加响应. HTTP协议 ...

  8. web api :Action Results in Web API 2

    原文:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results Web api 返回 ...

  9. 解决:jmeter查看结果树的响应数据提示超过最大值Response too large to be displayed

    问题:用jmeter做接口测试时,查看结果树的数据没有显示全,给出下面的错误提示 Response too large to be displayed. Size: 1349830 > Max: ...

随机推荐

  1. UI--仿IOS控件之ActionSheet样式 and more..

    ## <代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/d ...

  2. 转 kafka架构简介

    kafka架构 转 http://www.cnblogs.com/chushiyaoyue/p/5612298.html 相关文章: https://www.jianshu.com/p/6233d53 ...

  3. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  4. java中多个数字运算后值不对(失真)处理方法

    最近遇到一个bug ,在java里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.8999999999,丢失精度了,原来这是Java浮点运算的一个bug. 解决 ...

  5. 【python】pycharm常用配置快速入门。

    俗话说,工欲善其事必先利其器.当我们想从事一门新的语言的时候,最重要的是熟悉其常用的编辑器的配置.刚好这两天在学习python,网上看到一篇比较好的文章,转载过来自己学习一下.感谢:https://s ...

  6. 【凯子哥带你夯实应用层】使用ActionMode实现有删除动画的多选删除功能

        转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992      ActionMode是3.0之后.官方推荐的一种上下文菜单的实现方式,在之前一直用的是Co ...

  7. Android 自定义 View 知识点

    根据 Hencoder 提供的知识点,进行学习和总结. 三个要点: 布局 绘制 触摸反馈 绘制 自定义绘制:由自己实现绘制过程 常用绘制方法 onDraw(Canvas canvas) 绘制关键: c ...

  8. Java 泛型(Generics) 综述

    一. 引子 一般的类和方法.仅仅能使用详细类型:要么是基本类型.要么是自己定义类型.假设要编写能够应用于多种类型的代码,这样的刻板的限制对代码的束缚就会非常大. 多态算是一种泛化机制,但对代码的约束还 ...

  9. CNN及其可解释性

    https://stats385.github.io/readings https://arxiv.org/pdf/1311.2901.pdf A Mathematical Theory of Dee ...

  10. (原创)舌尖上的c++--相逢

    引子 前些时候,我在群里出了一道题目:将变参的类型连接在一起作为字符串并返回出来,要求只用函数实现,不能借助于结构体实现.用结构体来实现比较简单: template<typename... Ar ...