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

时间:2012-07-26 12:24:33

标签: java java-ee reflection javabeans

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

  • name(String)
  • age(String)
  • 地址(对象)。

Address包含3个变量:

  • door_no
  • 城市

我想要一个应该在Person中打印所有变量的实用程序。

我的意思是它应该打印Person&还包含其中的Address对象。

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

是否有可用的实用程序?

4 个答案:

答案 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依赖

  • jackson-core,groupId = com.fasterxml.jackson.core
  • jackson-databind,groupId = com.fasterxml.jackson.core