我编写的代码效果很好,但是我敢肯定,其中存在最干净,更易于阅读的内容
public static String get(String url, HashMap<String, Object> args){
if(!url.endsWith("/")) url+="/";
args.keySet().forEach(k -> {
try {
args.replace(k, URLEncoder.encode(args.get(k).toString(), "UTF-8"));
}catch (Exception ex){}
});
if(!args.isEmpty()){
url+="?";
for(Map.Entry<String, Object> arg : args.entrySet()){
url+=arg.getKey()+"="+arg.getValue()+"&";
}
url = url.substring(0, url.length()-1);
}
return url;
}
答案 0 :(得分:1)
您可以使用JAX-RS的UriBuilder:
public static String get(String url, Map<String, Object> args) {
UriBuilder builder = UriBuilder.fromUri(url);
args.entrySet().forEach(e -> builder.queryParam(e.getKey(), e.getValue()));
return builder.toString();
}
或者,您可能想看看Apache的URIBuilder。
答案 1 :(得分:0)
首先,不要试图重新发明轮子。在非常普遍的要求中创建带有查询参数的URI,因此我强烈建议您使用经过测试且受信任的解决方案,而不要编写自己的解决方案。
让我扩展一下answer发布的Jan Hronik。根据您在应用程序中使用的堆栈,可以采用以下方法之一:
UriBuilder
,来自JAX-RS(在Java EE 6中引入).mat-select-panel{
max-height: <your new height>
}
UriComponentsBuilder
来自Spring public static String buildUri(String baseUri, Map<String, Object> queryParams) {
UriBuilder builder = UriBuilder.fromUri(baseUri);
queryParams.forEach((key, value) -> builder.queryParam(key, value.toString()));
return builder.toString();
}
URIBuilder
来自Apache HTTP组件public static String buildUri(String baseUri, Map<String, Object> queryParams) {
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(baseUri);
queryParams.forEach((key, value) -> builder.queryParam(key, value.toString()));
return builder.toUriString();
}