我是Groovy的新手,我正在尝试从REST服务响应中解析标头。 字符串如下:
[HTTP://本地主机:4545 /第三方网页代码= IVJZw1]
我正在尝试编码IVJZw1
。
这很容易,我希望我能快速得到帮助。
Azou
答案 0 :(得分:6)
如果你想要快速和肮脏的东西,你可以使用正则表达式:
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]'
def code = (str =~ /code=(\w*)/)[0][1]
assert code == 'IVJZw1'
我假设“code”参数由字母数字字符组成(\w
)。
但是,如果您发现自己经常从URL中提取参数值,那么此解决方案很快就会变得非常脏。像ataylor suggested这样的东西可能更合适,特别是如果你可以提取在单独的函数上获取URL参数的逻辑。甚至可能是URL类本身的一种方法:D
import java.net.*
// Retrieves the query parameters of a URL a Map.
URL.metaClass.getQueryParams = { ->
delegate.query.split('&').collectEntries { param ->
param.split('=').collect { URLDecoder.decode(it) }
}.asImmutable()
}
// Then that method can be used directly on URLs :)
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]'
def code = new URL(str[1..-2]).queryParams.code
assert code == 'IVJZw1'
答案 1 :(得分:4)
如果方括号被剥离,它只是一个URL。你可以尝试这样的事情:
import java.net.*
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]'
def url = new URL(str.replaceFirst('^\\[', '').replaceFirst(']$', ''))
def paramMap = url.query.split('&').collectEntries { param ->
param.split('=').collect { URLDecoder.decode(it) }
}
assert paramMap['code'] == 'IVJZw1'
答案 2 :(得分:0)
Commons Http Client是java中的HTTP代理实现,支持客户端身份验证,HTTP状态管理和HTTP连接管理。这需要库httpclient-4.1.2.jar,httpcore-4.1.2.jar,httpmime-4.1.2.jar,httpclient-cache-4.1.2.jar,commons-codec.jar和commons-logging-1.1。 1.jar在课堂上。以下示例显示如何解析URI查询参数。
API
是一个众所周知的图书馆,你可以使用
String url = "http://www.example.com/something.html?one=11111&two=22222&three=33333";
List<NameValuePair> params = URLEncodedUtils.parse(new URI(url), "UTF-8");
for (NameValuePair param : params) {
System.out.println(param.getName() + " : " + param.getValue());
}
输出
一:11111
二:22222
三:33333