Значения Request.getParameterMap не могут быть преобразованы в строку - PullRequest
2 голосов
/ 05 декабря 2011

Я пытаюсь получить полную карту параметров из объекта запроса и выполнить итерацию по ней.

вот пример кода

  Map map = request.getParameterMap();
for(Object key : map.keySet()){
    String keyStr = (String)key;
    Object value = map.get(keyStr);     
    System.out.println("Key " + (String)key + "     :    " + value);
}

вывод

  Key businessunit     :    [Ljava.lang.String;@388f8321
   Key site     :    [Ljava.lang.String;@55ea0889
  Key startDate     :    [Ljava.lang.String;@77d6866f
  Key submit     :    [Ljava.lang.String;@25141ee0
  Key traffictype     :    [Ljava.lang.String;@4bf71724

из вывода видно, что объект значения является экземпляром String

now when i change my code to something like this

  Map map = request.getParameterMap();
  for(Object key : map.keySet()){
    String keyStr = (String)key;
    Object value = map.get(keyStr);
    if(value instanceof String)
    System.out.println("Key " + (String)key + "     :    " + (String)value);
}

он ничего не печатает, но в соответствии с предыдущим выводом он должен был печатать значения, и если я удаляю instanceOf check, он дает ClassCastException. Это ожидаемое поведение или я делаю что-то не так?

Ответы [ 3 ]

6 голосов
/ 21 февраля 2013

Поскольку возвращаемый объект является массивом строк, как указал Гарри Джой, вам придется использовать метод Arrays.toString() для преобразования этого массива в печатаемую строку:

    Map map = request.getParameterMap();
    for (Object key: map.keySet())
    {
            String keyStr = (String)key;
            String[] value = (String[])map.get(keyStr);
            System.out.println("Key" + (String)key + "   :   " + Arrays.toString(value));
    }
6 голосов
/ 05 декабря 2011

[Ljava.lang.String;@XXXXXXX означает, что это массив String, а не один String.Таким образом, ваше условие не выполняется и ничего не печатается.

2 голосов
/ 05 декабря 2011

Значение является массивом. Если вы уверены, что массив не пустой, вы должны получить строковое значение следующим образом:

String value = (String) map.get(keyStr)[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...