Как прочитать параметры и значение из строки запроса, используя Java? - PullRequest
4 голосов
/ 16 февраля 2010

Я использую Ciui из кода Google, и все запросы - только запросы GET, а не POST. Звонки осуществляется с помощью AJAX (я не уверен). Мне нужно знать, как прочитать параметр "searchstring" из этого URL. Когда я читаю это в своем сервлете с помощью метода getQueryString (), я не могу правильно сформировать фактический текст. Этот Unicode (когда% заменяется на /), как текст на самом деле на китайском языке. Пожалуйста, позвольте мне, как декодировать строку поиска и создать строку.

http://xxxx.com? SearchString =% u8BF7% u5728% u6B64% u5904% u8F93% u5165% u4EA7% u54C1% u7F16% u53F7% u6216% u540D% u79F0 и кнопка =% E6% 90% 9C% E7% B4% A2

Другой параметр в правильном процентном кодировании. Я могу декодировать, используя декодирование URL. Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 18 августа 2014

Хорошо, в моем случае у меня была строка запроса из другого источника, поэтому вам может понадобиться это:

    public static Map<String, String> getQueryMap(String query)  
{  
    String[] params = query.split("&");  
    Map<String, String> map = new HashMap<String, String>();  
    for (String param : params)  
    {  String [] p=param.split("=");
        String name = p[0];  
      if(p.length>1)  {String value = p[1];  
        map.put(name, value);
      }  
    }  
    return map;  
} 

Итак, вы можете использовать:

 Map params=getQueryMap(querystring);
 String id=(String)params.get("id");
 String anotherparam=(String)params.get("anotherparam");
2 голосов
/ 21 мая 2016

Решение с Java 8.

Этот фрагмент кода преобразует строку запроса в список ключ / значение:

List<AbstractMap.SimpleEntry<String, String>> list = 
        asList(queryString.split("&")).stream()
        .map(s -> copyOf(s.split("="), 2))
        .map(o -> new AbstractMap.SimpleEntry<String, String>(o[0], o[1]) )
        .collect(toList());

комментарий @Tuno вдохновил меня написать новый ответ, это альтернативное (и более короткое) решение использует groupingBy метод:

Map<String, List<String>> llist = 
       asList(queryString.split("&")).stream()
       .map(s -> copyOf(s.split("="), 2))
       .collect(groupingBy(s -> s[0], mapping(s -> s[1], toList())));

Я предлагаю декодировать значения с помощью URLDecoder.decode(String s, String enc)

Оба решения выводят содержимое коллекции с помощью этой строки:

list.stream().forEach(s -> System.out.println(s.getKey() + " = " + s.getValue()));
2 голосов
/ 16 февраля 2010

Ваша схема кодирования для этих китайских символов фактически нарушает веб-стандарты (а именно RFC 3986 ): знак процента является зарезервированным символом, который нельзя использовать, кроме стандартной кодировки процента.

Я бы настоятельно рекомендовал вам использовать стандартную схему кодирования (байты UTF-8 и процентное кодирование); тогда вы можете просто использовать стандартный метод getParameter(). Если вы настаиваете на нарушении стандарта, вполне возможно, что вы не сможете решить вашу проблему в контейнере сервлетов, соответствующих стандартам.

1 голос
/ 16 февраля 2010
public void doGet(HttpServletRequest request, HttpServletResponse response) {
    String searchString = request.getParameter("searchString");
    // process searchString
}

Декодирование параметра выполняется автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...