我有一个包含3个变量的Java bean类Person
:
Address
包含3个变量:
我想要一个应该在Person
中打印所有变量的实用程序。
我的意思是它应该打印Person
&还包含其中的Address
对象。
我可以创建一个hashmap并将变量名称和&在JSP中使用反射和打印键/值UI的值,但问题是我必须为Address
应用反射以在hashmap中添加变量/值。
是否有可用的实用程序?
答案 0 :(得分:31)
您可以使用ToStringBuilder中的Apache Commons。
来自文档:
此方法的典型调用如下所示:
public String toString() { return ToStringBuilder.reflectionToString(this); }
更多详情:
这个类可以构建一个良好且一致的toString() 任何类或对象。本课程旨在通过以下方式简化流程:
允许字段名称处理所有类型一致地处理空值 始终如一地输出数组和多维数组 对象和集合处理要控制的详细级别 类层次结构要使用此类,请按如下方式编写代码:
public class Person { String name; int age; boolean smoker; ... public String toString() { return new ToStringBuilder(this). append("name", name). append("age", age). append("smoker", smoker). toString(); } }
或者,有一种方法使用反射来确定 要测试的字段。因为这些字段通常是私有的,所以方法, reflectionToString,使用AccessibleObject.setAccessible来更改 田野的可见度。这将在安全经理下失败, 除非正确设置了适当的权限。也是 比明确测试慢。 此方法的典型调用如下所示:
public String toString() { return ToStringBuilder.reflectionToString(this); }
答案 1 :(得分:4)
您可能正在寻找Apache Commons ToStringBuilder#reflectionToString(Object)
。
答案 2 :(得分:1)
您可以实现toString
方法打印出您想要的任何内容,或者您可以使用Apache Commons ToStringBuilder
http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.html及其reflectionToString
方法。我不相信这会通过属性(例如地址)进行递归,但是如果你想看到打印出Street,Door No和City的地址,请使用它的toString
方法来打印出那些信息。
答案 3 :(得分:1)
您可能会发现Jackson JSON序列化程序可用于此目的。杰克逊图书馆可能已经成为您筹码的一部分。如果没有,请在下面找到所需的依赖项。
private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper();
public static String toStringUsingJackson(final Object object) {
try {
return OBJECT_MAPPER_SINGLETON.writeValueAsString(object);
} catch (final JsonProcessingException e) {
return String.valueOf(object);
}
}
示例输出:
{“name”:“John Doe”,“年龄”:42}
必需 maven / gradle依赖: