【问题标题】:Groovy string changes when used in URI addQueryParamGroovy 字符串在 URI addQueryParam 中使用时发生变化
【发布时间】:2018-02-13 02:57:48
【问题描述】:

以下是使用 HTTPbuilder 进行 Rest 查询的脚本的一部分。目的是进行连续查询并每次增加一天。 StartDate 和 EndDate 字符串的值在 uri.addQueryParam 中使用时会发生变化,而“:”字符显示 %3A 值。谁能确定我为什么以及如何让它保持为 : 字符?

import groovyx.net.http.URIBuilder

def url = 'https://my.url.com/'
def uri = new URIBuilder(url)

int i1 = 0
int i2 = 1


iS = String.format("%02d", i1)
StartDate = '2018-01-'+ iS + 'T00:00:00+00:00'
iE = String.format("%02d", i2)
EndDate = '2018-01-'+ iE +'T00:00:00+00:00'

println"Start Date = $StartDate"
println"End Date = $EndDate"

uri.addQueryParam 'StartTime', "${StartDate}"
uri.addQueryParam 'EndTime', "${EndDate}"

URIstring = uri.toString()

println"URI: ${URIstring}"

输出

Start Date = 2018-01-00T00:00:00+00:00
End Date = 2018-01-01T00:00:00+00:00
URI: https://my.url.com/?StartTime=2018-01-00T00%3A00%3A00%2B00%3A00&EndTime=2018-01-01T00%3A00%3A00%2B00%3A00

【问题讨论】:

  • 它正在对您的查询参数进行编码......这仍然是一个“:”,因为另一端的任何内容都会对其进行解码
  • 这不是我所经历的。如果我将其更改为 - uri.addQueryParam 'StartTime', '2018-01-01T00:00:00+00:00' 那么它可以工作。因为它是我收到 400 错误请求消息。

标签: groovy httpbuilder uribuilder


【解决方案1】:

URI builder 自动对值进行编码,因为 HTTP URL 有其规范,并且它指出实际上所有非拉丁字符都需要编码。 RFC:http://www.faqs.org/rfcs/rfc1738.html

但您可以根据需要设置原始值:

// Change:
//uri.addQueryParam 'StartTime', "${StartDate}"
//uri.addQueryParam 'EndTime', "${EndDate}"

// to

uri.setRawQuery([StartTime: StartDate, EndTime: EndDate].collect().join('&'))

【讨论】:

  • 好极了。完美运行。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多