我需要在某些情况下记录所有请求参数以进行调试......
我尝试使用ToStringBuilder.reflectionToString(request),但它仍显示内存地址
有没有简单的方法来记录纯文本中的请求参数,以便我可以做一些事情
logger.info(ToStringBuilder.reflectionToString(请求)); ?
我也试过logger.info(ToStringBuilder.reflectionToString(request.getParameterMap());
答案 0 :(得分:3)
reflectionToString仅对给定的对象使用反射,以查找要打印的属性。属性本身使用其toString()方法输出。 请求和参数映射都没有您感兴趣的请求参数作为直接属性,因此reflectionToString对您失败。
我知道在JDK或commons-lang中没有OOTB深入反射打印对象的方法。
简单的呼叫是什么
logger.info(request.getParameterMap());
为你生产?
啊,我明白了:参数值是String数组,只打印它们的哈希码。
您可以尝试这样的辅助函数(免责声明:未编译和未经测试)
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 :(得分:1)
此功能已经过测试
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();
}