Groovy 在 URI addQueryParam 中使用时字符串发生变化
Groovy string changes when used in URI addQueryParam
以下是使用 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 构建器自动编码值,因为 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('&'))
以下是使用 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 构建器自动编码值,因为 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('&'))