在URL上编码GET参数

时间:2018-07-04 18:35:09

标签: java http url get encode

我编写的代码效果很好,但是我敢肯定,其中存在最干净,更易于阅读的内容

    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;
    }

2 个答案:

答案 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();
}