如何打印复杂的Java对象(例如,使用作为对象集合的字段)?

Ste*_*ers 8 java collections logging object pretty-print

我正在寻找一个库函数(理想情况下来自常用的框架,例如Spring,Guava,Apache Commons等),它可以很好地打印任何Java对象的值.

这是一个普遍的问题,而不是具体的问题.在StackOverflow上看到了类似的问题,其常见的答案是" toString()在类上实现自己的方法"但是这个选项并不总是实用的 - 我正在寻找一种通常的方法来处理我遇到的任何对象,这可能源于第三方代码.另一个建议是使用Apache Commons的RefectionToStringBuilder,例如:

new ReflectionToStringBuilder(complexObject, new RecursiveToStringStyle()).toString()
Run Code Online (Sandbox Code Playgroud)

但这种用途有限 - 例如,当它遇到一个集合时,它倾向于输出这样的东西:

java.util.ArrayList@fcc7ab1[size=1]
Run Code Online (Sandbox Code Playgroud)

一个实际的用例示例是记录Iterable<PushResult>从JGit pushCommand.call()方法返回的内容- 如果发布答案,请确保它可以与此以及任何其他复杂对象一起使用.

Nax*_*s84 5

您可以尝试使用Gson。它还可以序列化数组,映射或其他任何内容。

MyObject myObject = new MyObject();
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
gson.toJson(myObject);
Run Code Online (Sandbox Code Playgroud)

对于反序列化使用:

gson.fromJson(MyObject.class);
Run Code Online (Sandbox Code Playgroud)

对于类型化的地图,请参见以下答案:Gson:有没有更简单的方法来序列化地图