Grails RestBuilder查询参数

4
我正在为Grails控制器编写一些功能测试,当测试查询参数时,我感觉它变得混乱了。
我知道我可以这样做,但它似乎很笨重。
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. 使用上述的urlVariables参数填写基本URL(即ID)。
  2. 传递另一个查询参数的映射,将每个参数都附加为键值对。

类似于:

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

我觉得这样会更加“DRY”,也更容易阅读和编写。

有人知道是否存在这样的机制吗?我知道我可以组合一个类来实现它,但如果已经有现成的实现,我希望能够避免这样做。

2个回答

2
您可以按照以下步骤操作。
Map queryParams = [x: 'foo', y: 'bar', z: 'baz']
RestResponse response = builder.get("http://example.com/api/{id}", queryParams) {
    urlVariables id:1
}

RestBuilderget()方法有三个参数重载:String类型的url、Map类型的queryParams和RequestCustomizer闭包。


3
谢谢您的提问 - 但是它似乎只替换被标记为占位符的URL变量,而不是添加查询字符串。我希望避免设置具有占位符的URL,并只需将映射传递给它。目前,我只是写了一个快速方法将映射连接成一个查询字符串。 - acanby

1

一开始使用API时,我也感到了同样的尴尬。目前我正在做一些更加简洁的事情:

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

感觉还不错,有点像Groovy SQL中的命名SQL参数的风格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接