Действительно ли там какой-либо Java эквивалентен из функции http_build_query PHP?

Вот решение от ListMultimap, либо из Google Guava или моей библиотеки Abacus-Util

ListMultimap result = Multimaps.newListMultimap(new HashMap<>(), () -> new ArrayList<>()); // by Google Guava.
// Or result = N.newListMultimap(); // By Abacus-Util
items.forEach(item -> item.getBelongsToCategories().forEach(c -> result.put(c, item)));

Я думаю, что это будет немного более эффективный и лаконичный без создания ненужных временных Entry объектов по flatMap.

8
задан falmp 11 March 2009 в 23:29
поделиться

3 ответа

посмотрите на класс QueryStringBuilder и его тестовый класс:

private String httpBuildQuery(Map<String, String> data)
        throws UnsupportedEncodingException {
    QueryStringBuilder builder = new QueryStringBuilder();
    for (Entry<String, String> pair : data.entrySet()) {
        builder.addQueryParameter(pair.getKey(), pair.getValue());
    }
    return builder.encode("UTF-8");
}
6
ответ дан 5 December 2019 в 17:41
поделиться

Вы, вероятно, хотели бы проверить "Принять" заголовок запроса на кодировку, поддерживаемую клиентом прежде, чем вызвать UTF-8 (даже при том, что это - вероятно, лучший выбор).

1
ответ дан 5 December 2019 в 17:41
поделиться

Взгляды хорошо, с этими протестами:

  • сделайте параметр a Map<String, String> вместо того, чтобы бросать ключ и значение для Строкового представления.
  • hardcoded кодирующие подозрительные взгляды. UTF-8 не является данным, он должен соответствовать кодированию, определенному в заголовке Запроса HTTP. Таким образом, код должен гарантировать, чтобы они сделали - по крайней мере, определяют его как константу где-нибудь и относятся к тот и здесь и везде, где кодирование запроса установлено.

Править: Кажется, что я был неправ относительно кодирования; HTTP ДОБИРАЕТСЯ, параметры не подвергаются заголовку кодирования и традиционно не имели четко определенного кодирования вообще. RFC 3988 действительно кажется мандату UTF-8, но это звучит довольно хрупким мне, поэтому если Вы не имеете жесткий контроль над сервером и можете удостовериться, что он действительно использует UTF-8 также, я использовал бы запросы POST на любые данные, это не находится в диапазоне ASCII на 7 битов.

0
ответ дан 5 December 2019 в 17:41
поделиться
Другие вопросы по тегам:

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