【发布时间】:2016-05-31 21:18:03
【问题描述】:
我一直在使用ReflectionToStringBuilder 序列化对象以进行日志记录。但是我们遇到了它不打印完整对象的问题。喜欢下面的案例
GetTimeBlocksOutput tbout = new GetTimeBlocksOutput();
TimeBlock tb = new TimeBlock();
tb.setAvailable(true);
List<TimeBlock> tbList = new ArrayList<TimeBlock>();
tbList.add(tb);
tbout.setTimeBlocks(tbList);
System.out.println(ReflectionToStringBuilder.toString(tbout));
打印出来
mycomp.GetTimeBlocksOutput@55d56113[timeBlocks [mycomp.TimeBlock@2]]
有没有一种简单的方法可以让序列化对象用于记录目的?主要是开箱即用的东西,无需手动更改要打印的对象
Json serializers 是一种选择,但是
- 它们应该用于这种情况吗?
- 考虑到 Json 序列化可能会抛出异常。他们是一个简单的库,可以提供简单的 util 方法来完成任务吗?
【问题讨论】:
-
.toString() override 不实用的原因是什么?
-
@Compass 在没有来自 OP 的更多细节的情况下无法判断,但他们可能没有能力修改相关类。
-
@avojak 如果这是问题所在,那么我认为将所有公众都运行到字符串中的辅助方法将是一个更可行的选择。使用反射退出封闭课程是一种创可贴。
-
@Compass 我同意 - 不仅是创可贴,而且非常脆弱。我只是在解决简单覆盖不可行的情况:)
-
抱歉延迟回复。有问题的类来自库,例如用于服务调用的输入/输出类或实体 bean 类以表示持久层中的对象编写帮助方法将您的代码与下划线实体紧密结合。如果有人向 bean 添加了另一个属性,您的日志将不会有这个附加字段。直到生产中出现故障并且您想知道对象属性的值是什么,您才会意识到缺少信息。如果有其他可用的方法,那么我们不应该维护不必要的代码。
标签: java json serialization