2016-02-04 55 views
4

我正在为Grails控制器编写一些功能测试,并且我感觉在测试查询参数时它变得混乱。Grails RestBuilder查询参数

我知道我可以做到这一点,但它似乎笨重。

Map getParms = [id:1, x:foo, y:bar, z:baz] 
RestResponse response = builder.get("http://example.com/api/{id}?x={x}&y={y}&z={z}") { 
    urlVariables getParams 
} 

理想我想:

  1. 填写使用上述
  2. urlVariables参数基本URL(即Id)的传递查询参数的另一个映射,附加各自的密钥值对

喜欢的东西:

Map queryParms = [x:foo, y:bar, z:baz] 
RestResponse response = builder.get("http://example.com/api/{id}") { 
    urlVariables id:1 
    queryVariables queryParams 
} 

我觉得这样会更“干”,而且更易读写。

有谁知道这种机制是否存在?我知道我可以组建一个班级来完成这个任务,但是如果有现有的实施方案,我希望避免这种情况。

回答

3

你可以做如下。

Map queryParams = [x: 'foo', y: 'bar', z: 'baz'] 
RestResponse response = builder.get("http://example.com/api/{id}", queryParams) { 
    urlVariables id:1 
} 

RestBuilder'sget()超载接受3个PARAMS:字符串URL,地图queryParams和RequestCustomizer关闭

+2

感谢这一点 - 但它似乎只替换变量标记为占位符的URL,不添加查询字符串。我希望避免必须使用占位符设置网址,然后只需在其上放置地图即可。目前,我刚刚写了一个快速方法将地图连接成查询字符串。 – acanby

1

我最初使用的API时,感受到了同样的尴尬。目前,我正在做的东西稍微更简洁:

RestResponse response = builder.get("http://example.com/api/{id}?x={x}&y={y}", [id:1, x:'foo', y:'bar']) 

感觉并不坏,有点相同的风格,在常规SQL命名的SQL参数