20 Nisan 2011 Çarşamba

[Ljava.lang.String;@

Tomcat'te bir servlet yazdınız diyelim. Yapılan requestlerin içeriğini görmek istiyorsunuz. request.getParameterMap() ne güzel map döndürüyor hemen gösteririm dediniz ama Map'inize ait Key değeri doğru görüntülendiği halde value değeri şöyle görüntüleniyor:

[Ljava.lang.String;@ ve bir takım rakamlar...

Bunun sebebi dönen objenin bir string değil array olması. [Ljava.lang.String;@ ifadesi dönen değerin bir String array olduğunu gösteriyor. O zaman doğru tipe Cast ederek değeri alabiliriz. Uzun uzun döngüler yazmak istemeyenler java.util paketinde bulunan Arrays.deepToString metodunu kullanabilirler.

Tüm bu anlattıklarımı yapmak için servlet'in doPost metodu içinde:

logger.debug("GELEN İSTEK: " + toString(request.getParameterMap()));

yazıp şu metodu ekleyebiliriz:

private String toString(Map m) {
StringBuilder sb = new StringBuilder("[");
String sep = " , ";
for (Object object : m.keySet()) {
sb.append(sep)
.append(object.toString())
.append(" -> ")
.append(Arrays.deepToString((String[]) m.get(object)));
}
return sb.append("]").toString();
}