如何在Java中构建URL或URI?是否有惯用的方式,或者很容易做到这一点的库?
我需要允许从请求字符串开始,解析/更改各种URL部分(方案,主机,路径,查询字符串)并支持添加和自动编码查询参数.
我正在尝试使用spring的UriComponentsBuilder来生成一些用于oauth交互的URL.查询参数包括诸如回调URL和其中包含空格的参数值之类的实体.
试图使用UriComponentBuilder(因为现在不推荐使用UriUtils)
UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(oauthURL);
urlBuilder.queryParam("client_id", clientId);
urlBuilder.queryParam("redirect_uri", redirectURI);
urlBuilder.queryParam("scope", "test1 test2");
String url = urlBuilder.build(false).encode().toUriString();
Run Code Online (Sandbox Code Playgroud)
不幸的是,虽然scope参数中的空格已成功替换为'+',但redirect_uri参数根本不是url编码的.
例如,
redirect_uri=https://oauth2-login-demo.appspot.com/code
Run Code Online (Sandbox Code Playgroud)
应该结束了
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode
Run Code Online (Sandbox Code Playgroud)
但没有动过.潜入代码,特别是org.springframework.web.util.HierarchicalUriComponents.Type.QUERY_PARAM.isAllowed(c):
if ('=' == c || '+' == c || '&' == c) {
return false;
}
else {
return isPchar(c) || '/' == c || '?' == c;
}
Run Code Online (Sandbox Code Playgroud)
明确地允许':'和'/'字符,这不应该是口香糖.它必须做一些其他类型的编码,虽然对于我的生活,我无法想象什么.我在这里吠叫错了树吗?
谢谢
我正在寻找的是Java中的一些代码,它将获取一个Map对象并将其转换为一个查询字符串,我可以附加到我返回的URL.我确定有一个库可以做到这一点以及更多,但我无法通过快速谷歌搜索找到它.有人知道会这样做吗?