Go Revel - Parameters(参数绑定)
Go Revel - Parameters(参数绑定)
参数绑定
Revel框架会尽可能的将提交参数转换为期望的Go类型。这个从一个字符串提交参数转换为另一个类型被称为数据绑定
。
参数
所有的请求参数被存放在一个Params
中,他包括:
URL路径参数
URL查询参数
表单值(或Multipart)
文件上传
这是Params
的定义:
type Params struct {
url.Values
Files map[string][]*multipart.FileHeader
}
嵌入的url.Values
提供了对简单值的访问,但开发者会发现非字符的值使用revel的数据绑定机制也非常容易。
Action参数
Params
中的参数可以当作方法参数被Action接收。例如:
func (c AppController) Action(name string, ids []int, user User, img []byte) revel.Result {
...
}
在调用之前,revel会使用Binder
绑定器将提交的参数按名称转换为期望类型,如果转换不成功,将会用期望类型的0值代替。
Binder绑定器
绑定一个提交参数至期望的类型。
func (c SomeController) Action() revel.Result {
var ids []int
c.Params.Bind(&ids, "ids")
...
}
以下的数据类型支持开箱转换:
任意宽度的int整数
Bool类型
任意支持类型的指针
任意支持类型的切片
结构
time.Time 类型的日期与时间
*os.File, []byte, io.Reader, io.ReadSeeker 文件上传用到的
Booleans
字符串值true
, on
, 与 1
都会被转为true
,否则被转为false
Slices
对于slices切片有两种支持: ordered 有序 与 unordered 无序.
有序:
?ids[0]=1
&ids[1]=2
&ids[3]=4
slice中的数据 []int{1, 2, 0, 4}
无序:
?ids[]=1
&ids[]=2
&ids[]=3
slice中的数据 []int{1, 2, 3}
只有struct切片将会使用有序切片
?user[0].Id=1
&user[0].Name=rob
&user[1].Id=2
&user[1].Name=jenny
Structs
struct使用.
符号来进行绑定
?user.Id=1
&user.Name=rob
&user.Friends[]=2
&user.Friends[]=3
&user.Father.Id=5
&user.Father.Name=Hermes
将会绑定为:
type User struct {
Id int
Name string
Friends []int
Father User
}
只有可导出字段才能被绑定。
日期与时间
revel内置了SQL标准时间字符串格式[“2006-01-02”, “2006-01-02 15:04”]
可以用如下方法添加其他的时间格式:
func init() {
revel.TimeFormats = append(revel.TimeFormats, "01/02/2006")
}
文件上传
上传的文件可以被绑定为以下任意一种类型:
*os.File
[]byte
io.Reader
io.ReadSeeker
上传使用Go的multipart
来处理。上传的数据首先被保存在内存中,当大小超过10MB(默认)时,会保存至临时文件。
当绑定为os.File
类型时,revel会默认将上传的文件存储至临时文件,这样相比其他类型,效率比较低。
自定义 Binders
创建自定义Binder绑定器,只需要实现binder
接口并且注册。
func myBinder(params Params, name string, typ reflect.Type) reflect.Value {
...
}
func init() {
revel.TypeBinders[reflect.TypeOf(MyType{})] = myBinder
}
Go Revel - Parameters(参数绑定)的更多相关文章
- WebAPI下的如何实现参数绑定
本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...
- .NET链接Oracle 参数绑定问题
在.NET项目中链接Oracle使用的驱动是 Oracle.ManagedDataAccess.dll ,这里下载 所遇到的问题 使用存储过程一个参数没有问题,发现两个或两个以上会有参数没传过来的现象 ...
- WebApi 参数绑定方法
WebAPI 2参数绑定方法 简单类型参数 Example 1: Sending a simple parameter in the Url 01 02 03 04 05 06 07 08 09 ...
- [译]WebAPI下的如何实现参数绑定
本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...
- 【Hibernate实战】源码解析Hibernate参数绑定及PreparedStatement防SQL注入原理
本文采用mysql驱动是5.1.38版本. 本篇文章涉及内容比较多,单就Hibernate来讲就很大,再加上数据库驱动和数据库相关,非一篇文章或一篇专题就能说得完.本文从使用入手在[Spr ...
- Python中函数参数类型和参数绑定
参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...
- springMVC-接收数据-参数绑定
接收数据-参数绑定 #Method Arguments概观 Same in Spring WebFlux The table below shows supported controller meth ...
- 防sql注入之参数绑定 SQL Injection Attacks and Defense 预处理语句与存储过程
http://php.net/manual/zh/pdo.prepared-statements.php 预处理语句与存储过程 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作 ...
- 【工作篇】再次熟悉 SpringMVC 参数绑定
前言 主要现在项目中使用的参数绑定五花八门的,搞得很头大,例如有些用字符串接收日期,用字符串接受数组等等,完全没有利用好 SpringMVC 的优势,这里自己也总结一下,免得到时又要百度谷歌查找. 以 ...
随机推荐
- 基于.NET MVC的高性能IOC插件化架构
基于.NET MVC的高性能IOC插件化架构 最近闲下来,整理了下最近写的代码,先写写架构,后面再分享几个我自己写的插件 最近经过反复对比,IOC框架选择了Autofac,原因很简单,性能出众,这篇博 ...
- cocos2d-x 3.2 2048——第六部分(最后一章)
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- JavaScript Date对象介绍
原文:JavaScript Date对象介绍 Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new ...
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
原文:在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持. WAMPServer可以让开发者在Windows系统下快速搭建WAMP环境,它支持多版本的Apach ...
- java设计模式之四建造者模式(Builder)
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...
- 大约xib连接错误bug正确
今天code什么时候,发现xib除了加载问题,研究发现的一个问题 在连接的时候, object一定要选择,您连接view,代替 File's Owner 版权声明:本文博客原创文章,博客,未经同意,不 ...
- 单元测试之Qunit
单元测试之Qunit 前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QU ...
- ASP.NET 5应用是如何运行的(3)
ASP.NET 5应用是如何运行的(3) 设置自定义的入口程序体现应用本身与应用托管之间的分离,它使我们可以创建独立于托管环境的应用,并根据需要寄宿于任何一个我们希望的宿主程序下,对于Web应用来说这 ...
- leetcode第三题--Longest Substring Without Repeating Characters
Problem:Given a string, find the length of the longest substring without repeating characters. For e ...
- 如何使用AdvancedInstaller在安装包中运行一个.bat文件
原文:如何使用AdvancedInstaller在安装包中运行一个.bat文件 1, 首先要保证你的Files and Folders模块下的Application Folder文件夹下包含你要运行 ...