有没有Java方法将参数集合编码为URL查询组件? [英] Is there a Java method that encodes a collection of parameters as a URL query component?

查看:232
本文介绍了有没有Java方法将参数集合编码为URL查询组件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一个广泛使用的Java库,可以像 dojo.objectToQuery() 是吗例如。 (假设使用HttpCore的 HttpParams 对象,但是任何键盘 - 值映射将执行):

  HttpParams params = new BasicHttpParams()
.setParameter(foo,bar )
.setParameter(thud,grunt);
UnknownLibrary.toQueryString(params);

应该产生foo = bar& thud = grunt。



我知道这不难写,但似乎应该已经写过了。我只是找不到它。

解决方案

我最终写了我自己的。它可以像

  URIUtils.withQuery(uri,param1,value1,param2,value2 ); 

这不是很糟糕。

  / ** 
*连接< code> uri< / code>具有从
*< code> params< / code> ;.生成的查询字符串。
*
* @param uri基本URI
* @param params a< code> Map< / code>键/值对
* @返回一个新的< code> URI< / code>
* /

public static URI withQuery(URI uri,Map< String,String> params){
StringBuilder query = new StringBuilder();
char separator ='?';
for(Entry< String,String> param:params.entrySet()){
query.append(separator);
separator ='&';
try {
query.append(URLEncoder.encode(param.getKey(),UTF-8));
if(!StringUtils.isEmpty(param.getValue())){
query.append('=');
query.append(URLEncoder.encode(param.getValue(),UTF-8));
}
} catch(UnsupportedEncodingException e){
throw new RuntimeException(e);
}
}
返回URI.create(uri.toString()+ query.toString());
}

/ **
*连接< code> uri< / code>具有从
*< code> params< / code> ;.生成的查询字符串。 < code> params< / code>的成员将
*解释为{key1,val1,key2,val2}。空值可以被赋予
* as< code>< / code>或< code> null< / code> ;.
*
* @param uri基本URI
* @param按顺序对键/值对进行参数
* @返回一个新的< code> URI< / code>
* /
public static URI withQuery(URI uri,String ... params){
Map< String,String> map = new LinkedHashMap< String,String>(); (int i = 0; i< params.length; i + = 2)
{
String key = params [i];
String val = i + 1< params.length? params [i + 1]:;
map.put(key,val);
}
返回withQuery(uri,map);
}


Is there a widely-used Java library that does something like what dojo.objectToQuery() does? E.g. (assuming the use of HttpCore's HttpParams object, but any key-value mapping will do):

HttpParams params = new BasicHttpParams()
    .setParameter("foo", "bar")
    .setParameter("thud", "grunt");
UnknownLibrary.toQueryString(params);

should yield "foo=bar&thud=grunt".

I know it's not hard to write but it seems like it should have already been written. I just can't find it.

解决方案

I ended up writing my own. It can be called like

URIUtils.withQuery(uri, "param1", "value1", "param2", "value2");

which isn't so bad.

/**
 * Concatenates <code>uri</code> with a query string generated from
 * <code>params</code>.
 *
 * @param uri the base URI
 * @param params a <code>Map</code> of key/value pairs
 * @return a new <code>URI</code>
 */

public static URI withQuery(URI uri, Map<String, String> params) {
    StringBuilder query = new StringBuilder();
    char separator = '?';
    for (Entry<String, String> param : params.entrySet()) {
        query.append(separator);
        separator = '&';
        try {
            query.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            if (!StringUtils.isEmpty(param.getValue())) {
                query.append('=');
                query.append(URLEncoder.encode(param.getValue(), "UTF-8"));
            }
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
    return URI.create(uri.toString() + query.toString());
}

/**
 * Concatenates <code>uri</code> with a query string generated from
 * <code>params</code>.  The members of <code>params</code> will be
 * interpreted as {key1, val1, key2, val2}.  Empty values can be given
 * as <code>""</code> or <code>null</code>.
 *
 * @param uri the base URI
 * @param params the key/value pairs in sequence
 * @return a new <code>URI</code>
 */
public static URI withQuery(URI uri, String... params) {
    Map<String, String> map = new LinkedHashMap<String, String>();
    for (int i = 0; i < params.length; i += 2) {
        String key = params[i];
        String val = i + 1 < params.length ? params[i + 1] : "";
        map.put(key, val);
    }
    return withQuery(uri, map);
}

这篇关于有没有Java方法将参数集合编码为URL查询组件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆