Существует ли метод Java, который кодирует набор параметров как компонент запроса URL?

Символ является единственным символом UTF-16, который является буквой, цифрой, знаком пунктуации, вкладкой, пространством или чем-то подобным.

литерал символа А является или единственным символом, включенным в метки одинарной кавычки как это

char myCharacter = 'g'; 

или escape-последовательностью, или даже управляющей последовательность Unicode:

char a = '\t';    // Escape sequence: tab
char b = '\177'   // Escape sequence, octal.
char c = '\u03a9' // Unicode escape sequence. 

стоит отметить, что Управляющие последовательность Unicode обрабатываются очень рано во время компиляции, и следовательно использующий '\u00A' приведет к ошибке компилятора. Для специальных символов лучше использовать escape-последовательности вместо этого, т.е. '\n' вместо '\u00A'.

Двойные кавычки, являющиеся для String, необходимо использовать "escape-последовательность двойной кавычки" (\") внутренние строки, где она была бы в других отношениях оконечный строка.
, Например:

System.out.println("And then Jim said, \"Who's at the door?\"");

не необходимо выйти из двойной кавычки в одинарных кавычках.
следующая строка законна в Java:

char doublequote = '"';
7
задан Steven Huwig 10 September 2009 в 14:47
поделиться

4 ответа

В итоге я написал свой собственный. Его можно назвать

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

, что не так уж и плохо.

/**
 * 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);
}
5
ответ дан 6 December 2019 в 07:51
поделиться

Для этого вам не нужна библиотека. Я не нашел ни одного в HttpCore, поэтому написал что-то вроде этого:

public String toString() {

    StringBuilder sb = new StringBuilder(baseUrl);

    char separator;

    if (baseUrl.indexOf('?') > 0)
        separator = '&';
    else
        separator = '?';

    for (Parameter p : parameters) {
        sb.append(separator);
        try {
            sb.append(URLEncoder.encode(p.name, "UTF-8"));
            if (p.value != null) {
                sb.append('=');
                sb.append(URLEncoder.encode(p.value, "UTF-8"));
            }
        } catch (UnsupportedEncodingException e) {
            // Not really possible, throw unchecked exception
            throw new IllegalStateException("No UTF-8");
        }

        separator = '&';
    }

    return sb.toString();
}
5
ответ дан 6 December 2019 в 07:51
поделиться

Если у вас есть JAX-RS, есть javax.ws.rs.core.UriBuilder; кроме этого, вы должны в первую очередь знать о URLEncoder и URLDecoder, которые, по крайней мере, будут кодировать части списка параметров.

1
ответ дан 6 December 2019 в 07:51
поделиться

Зачем изобретать велосипед? Apache HttpClient имеет URLEncodedUtils:

   List<BasicNameValuePair> params = Arrays.asList(new BasicNameValuePair("\\%^ &=@#:", "\\%^ &=@#:"));
   String query = URLEncodedUtils.format(params, "UTF-8");
12
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: