beego: 获取request参数
beego提供了一套web开发的框架。但我们在开发过程中遇到了一些问题,现汇总如下。
测试1:测试只有keys数组的情况
func (this *TestController) Index() {
keys := make([]string, 0)
this.Ctx.Input.Bind(&keys, "keys")
fmt.Println(keys, len(keys))
}
测试结果:
url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test
结果:[] 0
反复测试多次,结果相同
测试2:测试有keys数组还有vals数组的情况
func (this *TestController) Index() {
keys := make([]string, 0)
this.Ctx.Input.Bind(&keys, "keys")
var vals map[]string
vals = make(map[]string, 0)
this.Ctx.Input.Bind(&vals, "vals")
fmt.Println(keys, vals, len(keys), len(vals))
}
测试结果:
url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test&vals[]=test&vals[]=test
[] [] 0 0
多次测试,结果相同
测试3:测试有keys数组,有test字符串
func (this *TestController) Index() {
var test string
this.Ctx.Input.Bind(&test, "test")
fmt.Println(test)
keys := make([]string, 0)
this.Ctx.Input.Bind(&keys, "keys")
fmt.Println(keys, len(keys))
}
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test
输出:gotest:reflect.Set: value of type int is not assignable to type string
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test&test=
输出:gotest:reflect.Set: value of type int is not assignable to type string
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test&test=test
输出:
test
[test test] 2
测试4:有keys数组,有test字符串,用GetString来获取test
func (this *TestController) Index() {
var test string
test = this.GetString("test")
fmt.Println(test)
keys := make([]string, 0)
this.Ctx.Input.Bind(&keys, "keys")
fmt.Println(keys, len(keys))
}
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test&test=test
结果:
test
[test test] 2
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test
结果:
[test test] 2
进一步测试
测试4:
func (this *TestController) Index() {
var test string
test = this.GetString("test")
fmt.Println(test)
keys := make([]string, 0)
this.Ctx.Input.Bind(&keys, "keys")
fmt.Println(keys, len(keys))
}
接下来的测试不会设置test,输出结果也不包含test的输出
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test
输出:[test test] 2
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=
输出:[test ] 2
测试url:http://api.query.qihoo.net:8090/test/index?keys[0]=test&keys[1]=test
输出:[test test] 2
测试url:http://api.query.qihoo.net:8090/test/index?keys[0]=test&keys[1]=
输出:gotest:reflect.Set: value of type int is not assignable to type string
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test&keys[0]=test&keys[1]=test
输出:[test test test test] 4
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=test&keys[0]=test&keys[1]=test&keys[2]=
输出:gotest:reflect.Set: value of type int is not assignable to type string
测试url:http://api.query.qihoo.net:8090/test/index?keys[]=test&keys[]=&keys[0]=test&keys[1]=test&keys[2]=test
输出:[test test test test ] 5
测试结果显示:
使用beego框架,想要获取数组必须具备几个条件:
1,必须有非数组的变量存在(string可以,其它类型int-bool等的没做测试),如果没有单个变量只有数组(不论是单个数组或者多个数组)则所有的数组获均取不到元素;
2,如果url是keys[1]=test&keys[2]=test这样的,一定得保证每个项都要有值,不能为空,也就是不能存在keys[1]=这样的项
注意事项:
非数组的单个变量如果不确定的话,最好用GetString,GetString不论该变量是否在url中被设置都能正常工作。如果用Bind,一定要保证该变量是有值的,否则报错
允许这样的url:keys[]=test&keys[]=,不允许keys[2]这样的url:keys[0]=test&keys[1]=test&keys[2]=
实际开发中:
1,注意事项1非常有用,我们可以用一行代码完成:var _ = this.GetString("test")
2,php的http_huild_query处理后的url是进行了urlencode编码,而且数组是带下标的(类似于keys[0]=1&keys[1]=2),从0开始编号。大部分工作正常,在值为空字符串是会有问题(keys[0]=test&keys[1]=test&keys[2]=),我们如何处理这部分情况呢?如下实验给出了结论:用map[string]string而不是[]string
继续做实验。
实验5:
func (this *TestController) Index() {
var _= this.GetString("test")
var keys map[string]string
keys = make(map[string]string, 0)
this.Ctx.Input.Bind(&keys, "keys")
fmt.Println(keys, len(keys))
}
测试url:http://api.query.qihoo.net:8090/test/index?keys[0]=test&keys[1]=test&keys[2]=test
结果:map[0:test 1:test 2:test] 3
测试url:http://api.query.qihoo.net:8090/test/index?keys[0]=test&keys[1]=test&keys[2]=
结果:map[0:test 1:test 2:] 3
测试url:http://api.query.qihoo.net:8090/test/index?keys[0]=test&keys[1]=test&keys[2]=test&keys[]=100
结果:map[0:test 1:test 2:test :100] 4
我们看到用map[string]string来代替[]string能够解决报错的问题,同时也有局限:不再兼容keys[]这样的数组元素。
所以区分两种不兼容的使用场景,只能取其中一种用:1,数组元素全部用keys[],并且不允许任意一个keys[]有空值,可用[]string的Bind;2,数组元素全部用keys[0],keys[1],keys[2],允许有空值,map[string]string的Bind,如果要用数组而不是map,需要手工转化。
beego: 获取request参数的更多相关文章
- 获取request参数的工具类
package cn.edu.hactcm.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...
- 使用JS获取request参数
1.document.write('<%=request.getAttribute("param")%>'); 2.window.navigator.userAgent ...
- springMVC 获取request参数
持续补充............ GET 常用的:@PathVariable @RequestParam request.getParameter POST 常用的:@ResponseBody ...
- request 获取请求参数
/** * 根据request获取请求的用户参数 * @return * @return */ protected <T> T getParamConvertEntity(Class cl ...
- golang web框架 beego 学习 (三) beego获取参数
直接上常用的例子吧: A: 获取URL中的参数 router func init() { beego.Router("/task/?:id/?:name", &co ...
- beego——获取参数
1.获取参数 我们经常需要获取用户传递的数据,包括Get.POST等方式的请求,beego里面会自动解析这些数据,你可以通过如下方式获取数据: GetString(key string) string ...
- 使用JavaScript获取Request中参数的值
本人很少写博客,有不正确的地方还希望大家多多指导. 假设现在有一个URL,如下. http://www.jacky.com/?id=1101&name=jacky 如何通过JS访问到id和na ...
- request对象常用API 获取请求参数的值 request应用 MVC设计模式
1 request对象常用API 1)表示web浏览器向web服务端的请求 2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1 ...
- java获取request中的参数、java解析URL问号后的参数
java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...
随机推荐
- JUnit01Eclipse添加JUnite
JUnit 傻瓜教程 添加一個java工程 點擊右鍵選擇Properties 创建一个source folder 目的就是把测试类和被测试的类分开 添加一个类 加法 乘法 public class ...
- java设计模式(三)
单例模式在一个jvm中有且仅有一个对象(1)内部静态类实现 class Singleton{ /*构造方法私有 防止实例化*/ private Singleton(){}; public static ...
- android 5.0 -- 主题
系统提供默认的三种主题样式 @android:style/Theme.Material (dark version) @android:style/Theme.Material.Light (ligh ...
- 修改VirtualBox虚拟机默认存储路径及虚拟机迁移方法
修改默认安装路径 在安装完虚拟机以后发现我的虚拟的磁盘文件是放在C盘的,就想着有没有办法修改默认存储路径.后来发现确实可以修改,修改虚拟机方法如下:"管理"--->" ...
- java中字符串的操作
//创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...
- ubuntu通过tnvm安装Nodejs
第一步,先安装tvm tnvm(Taobao Node Version Manager)淘宝Node版本管理器 安装: 直接输入 wget -O- https://raw.githubusercont ...
- Java 泛型 泛型数组
Java 泛型 泛型数组 @author ixenos 先给结论 不能(直接)创建泛型数组 泛型数组实际的运行时对象数组只能是原始类型( T[]为Object[],Pair<T>[]为Pa ...
- Django中的Form表单
Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...
- 判定生死的心跳机制 --ESFramework 4.0 快速上手(07)
在Internet上采用TCP进行通信的系统,都会遇到一个令人头疼的问题,就是"掉线".而"TCP掉线"这个问题远比我们通常所能想象的要复杂的多 -- 网络拓扑 ...
- JS 经典代码段总结 start from 2016-08-22
1.for(var i = 0, max = myArray.length; i < max ; i++){ //用myArrayy[i]来做点什么 } 用max存储myArray的长度,防止每 ...