用于记录的Java对象序列化

时间:2016-05-31 21:18:04

标签: java json serialization

我一直在使用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方法来完成任务吗?

1 个答案:

答案 0 :(得分:3)

您看到的是默认的toString()实施。

来自Object.java

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

只需覆盖此方法并返回符合您需求的String表示形式!

GetTimeBlocksOutput可能是

public String toString() {
    return this.timeBlocks.toString(); // assuming timeBlocks can't be null
}

TimeBlock可能是

public String toString() {
    return "Available:" + this.available;
}

你没有太多关于TimeBlock和GetTimeBlocksOutput中包含的信息,但我相信你可以提出一个很好的实现。