我想把键值对作为查询参数附加到一个现有的URL上。虽然我可以通过检查URL是否有查询部分或片段部分的存在来完成这个操作,并通过跳过一堆if子句来完成附加,但我想知道如果通过Apache Commons库或类似的东西来完成这个操作,是否有干净的方法。http://example.com
应该是http://example.com?name=John
http://example.com#fragment
应该是http://example.com?name=John#fragment
http://example.com?email=john.doe@email.com
应该是http://example.com?email=john.doe@email.com&name=John
http://example.com?email=john.doe@email.com#fragment
应该是http://example.com?email=john.doe@email.com&name=John#fragment
我已经运行过这个场景很多次了,我想这样做,而不以任何方式打破URL。
8条答案
按热度按时间wr98u20j1#
有很多库可以帮助你构建URI(不要重复发明轮子),这里有三个库可以帮助你开始:
Java EE 7
org.apache. http组件:http客户端:4.5.2
网站名称:spring-web:4.2.5.版本
另请参阅:GIST > URI Builder Tests
wlwcrazw2#
这可以通过使用java.net.URI类构造一个新示例来完成,该示例使用现有示例的部分,这应该确保它符合URI语法。
查询部分将为空或现有字符串,因此您可以决定使用&追加另一个参数或开始新的查询。
较短的备选方案
产出
luaexgnf3#
对于Android,请用途:https://developer.android.com/reference/android/net/Uri#buildUpon()
5lwkijsr4#
使用
URI
类。使用现有的
String
创建一个新的URI
,将其"分解"为多个部分,并示例化另一个部分以组装修改后的url:8mmmxcuj5#
我建议改进Adam的答案,接受HashMap作为参数
zd287kbt6#
Kotlin& clean,所以你不需要在代码评审之前进行重构:
cyvaqqii7#
使用此函数将新参数附加到现有URI
nxowjjhe8#
更新亚当的答案,同时考虑到tryp的答案。不必在循环中示例化字符串。