如何解决Lang ToStringBuilder请求参数记录
| 在某些情况下,我需要记录所有请求参数以进行调试... 我尝试使用ToStringBuilder.reflectionToString(request),但它仍然显示内存地址 有什么简单的方法可以将请求参数记录为纯文本格式,以便我可以执行某些操作 logger.info(ToStringBuilder.reflectionToString(request)); ? 我也尝试了logger.info(ToStringBuilder.reflectionToString(request.getParameterMap());解决方法
ReflectionToString仅在给定的对象上使用反射,以查找要打印的属性。属性本身使用其toString()方法输出。
请求和参数映射都没有您感兴趣的请求参数作为直接属性,因此ReflectionToString对您而言失败。
我不知道用OOTB方式以JDK或commons-lang深度反射打印对象。
简单的叫什么
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();
}
, 该功能经过测试
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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。