Регистрация параметров запроса Lang ToStringBuilder - PullRequest
1 голос
/ 31 мая 2011

Мне нужно зарегистрировать все параметры запроса в некоторых ситуациях для целей отладки ...

Я пытался использовать ToStringBuilder.reflectionToString (запрос), но он все еще показывал адреса памяти

Есть лилюбой простой способ записать параметры запроса в виде обычного текста, чтобы я мог что-то сделать

logger.info (ToStringBuilder.reflectionToString (request));?

Я также попробовал logger.info (ToStringBuilder.reflectionToString (request.getParameterMap ());

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

ReflexToString использует отражение только для данного объекта, чтобы найти атрибуты для печати.Сами атрибуты выводятся с использованием их методов toString ().Ни у запроса, ни у карты параметров нет параметров запроса, которые вас интересуют, как прямых атрибутов, поэтому refleToString не работает для вас.

Я не знаю ни одного OOTB-способа глубокого отражения-печати объекта, в JDK или в обычном порядке.lang.

Что для вас производит простой вызов

logger.info(request.getParameterMap());

?

Ах, я вижу: значения параметров - это строковые массивы, которые только печатают свой хэш-код.

Вы можете попробовать вспомогательную функцию, подобную этой (заявление об отказе: не скомпилировано и не протестировано)

public static String getParameterToString(ServletRequest request){
  StringBuilder sb = new StringBuilder("{");
  for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()){
    sb.append(entry.getKey()).append(":");
    sb.append(Arrays.toString(entry.getValue())).append(",");
  }
  if (sb.length() > 1)
    sb.setLength(sb.length() - 1);
  return sb.append("}").toString();
}
1 голос
/ 27 октября 2011

Эта функция проверена

public static String dumpParams(ServletRequest req) {
    StringBuilder sb = new StringBuilder();
    Set<Map.Entry<String, String[]>> entries = req.getParameterMap().entrySet();
    for (Map.Entry<String, String[]> entry : entries) {
        sb.append(entry.getKey())
          .append(" = ")
          .append(Arrays.toString(entry.getValue()))
          .append(", ");
    }
    if (sb.length() > 2)
        sb.setLength(sb.length() - 2);  //Removes the last comma
    return sb.toString();
}
...