如何使用反射或任何其他实用程序完全打印JavaBean

如何使用反射或任何其他实用程序完全打印JavaBean,java,jakarta-ee,reflection,javabeans,Java,Jakarta Ee,Reflection,Javabeans,我有一个Java bean类Person,包含3个变量: 名称(字符串) 年龄(字符串) 地址(对象) 地址包含3个变量: 街头 门号 城市 我想有一个实用程序,可以打印Person中的所有变量 我的意思是它应该打印Person&以及其中包含的地址对象 我可以创建一个hashmap,并使用反射和JSP中的打印键/值UI来放置变量名和值,但问题是我必须为Address应用反射来在hashmap中添加变量/值 是否有实用程序可以执行此操作?您可以从中使用 从文件: 此方法的典型调用如下所示:

我有一个Java bean类
Person
,包含3个变量:

  • 名称(字符串)
  • 年龄(字符串)
  • 地址(对象)
地址
包含3个变量:

  • 街头
  • 门号
  • 城市
我想有一个实用程序,可以打印
Person
中的所有变量

我的意思是它应该打印
Person
&以及其中包含的
地址
对象

我可以创建一个hashmap,并使用反射和JSP中的打印键/值UI来放置变量名和值,但问题是我必须为
Address
应用反射来在hashmap中添加变量/值

是否有实用程序可以执行此操作?

您可以从中使用

从文件:

此方法的典型调用如下所示:

 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }
 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();
   }
 }
或者,有一种方法使用反射来确定 要测试的字段。因为这些字段通常是私有的, ReflectionString,使用AccessibleObject.setAccessible更改 字段的可见性。在安全管理器的管理下,这将失败, 除非正确设置了相应的权限。也是 比显式测试慢。 此方法的典型调用如下所示:

 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }
 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }

您可能正在寻找Apache Commons。

您可以实现
toString
方法来打印您想要的任何内容,或者您可以使用Apache Commons
toString构建器及其
ReflectionString
方法。我不相信这会在属性中循环出现(例如address),但是如果您想看到用Street、Door No和City打印出来的地址,请使用Implementation它的
toString
方法来打印该信息。

您可能会发现JacksonJSON序列化程序在这方面很有用。Jackson库可能已经是您的堆栈的一部分。如果没有,请在下面查找所需的依赖项

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);
    }
}
样本输出:

{“姓名”:“约翰·多伊”,“年龄”:42}

所需的maven/gradle依赖项

  • jackson core,groupId=com.fasterxml.jackson.core
  • jackson数据绑定,groupId=com.fasterxml.jackson.core

这不是这些对象上的
#toString()
应该做的吗?您可以在toString方法之外使用toString Builder。ToStringBuilder.ReflectionString(其他对象)您可以这样使用:
ToStringBuilder.ReflectionString(objectRetrieved)
与Jeff完全一样explained@FranciscoSpaeth如果你有一个列表变量呢?列出爱好;如何设置该toString?本机列表实现已经存在一个
toString()
,它将输出由每个项的
toString()
组成的字符串。在
String
情况下,将输出类似
[Item1,Item2,Item3]
的内容,因为它使用
String
类的
toString()
。这意味着输出取决于该列表存储的对象类,因此您可能希望覆盖类的
toString()
方法,以获得一个好的
list
输出,这可以使用提供的答案完成:)