【发布时间】:2018-04-04 19:48:39
【问题描述】:
我们有一个非常大的对象图(在正常程序执行期间通过 DataNucleus ORM 从数据库延迟加载,因此通常没有问题)但我们只想用 SnakeYaml 序列化其中的一小部分 - 只是类的一小部分。
其中一个类与其他类之间存在关系,最终“到达”对象图中的大多数其他对象,这导致将几乎所有对象从数据库拉入 YAML 序列化流 - 经典的“序列化”整个世界”的问题,当您拥有数以百万计的可到达对象时,它的结局并不好:)
我发现了 SnakeYaml 'Representer' 类,它看起来像一个钩子,可让您指定“不”来序列化特定 bean,但它看起来不像对象图导航过程中遇到的断路器那个豆子。它不会为该 bean 编写 YAML 输出,但 SnakeYaml 似乎会继续导航对象图经过该 bean。
private class CircuitBreakerRepresenter extends Representer
{
@Override
protected NodeTuple representJavaBeanProperty(Object javaBean, Property property,
Object propertyValue, Tag customTag) {
// Intention: Don't navigate past the instances of 'Role' class when serializing
// Outcome: Appears to continue navigating past 'Role' class instances
if (javaBean instanceof Role) {
return null;
} else {
return super.representJavaBeanProperty(javaBean, property, propertyValue,
customTag);
}
}
}
有没有办法让 SnakeYaml 在序列化对象图时不经过特定的 bean?
【问题讨论】: