如何解决JSONB序列化的双向关系?

Eme*_*son 5 java serialization json jackson jsonb

我正在尝试序列化具有双向关系的实体:

class TypeA {
  String name;
  TypeB typeB; 
}

class TypeB {
  String identifier;
  TypeA typeA;
}
Run Code Online (Sandbox Code Playgroud)

与杰克逊我解决@JsonBackReference中的TypeB属性和@JsonManagedReference中的typeA属性,但我怎么能做到这一点的JSONB(Eclipse的Yasson实现)?

Caused by: javax.json.bind.JsonbException: Recursive reference has been found in class class xxxxxx.model.Analysis.
        at org.eclipse.yasson.internal.serializer.ObjectSerializer.serializeInternal(ObjectSerializer.java:76)
        at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serialize(AbstractContainerSerializer.java:107)
        at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serializerCaptor(AbstractContainerSerializer.java:125)
        at org.eclipse.yasson.internal.serializer.ObjectSerializer.marshallProperty(ObjectSerializer.java:121)
        at org.eclipse.yasson.internal.serializer.ObjectSerializer.serializeInternal(ObjectSerializer.java:69)
        ... 45 more
Run Code Online (Sandbox Code Playgroud)

OBS:我用 DTO 解决了,但疑问依然存在。

Anu*_*rma 5

为了解决圆形结构,您应该使用@JsonbTransient。如文档 [0] 中所述:

  1. 默认情况下,JSONB 会忽略具有非公共访问权限的属性。所有公共属性 - 公共字段或具有公共 getter 的非公共字段都被序列化为 JSON 文本。
  2. JSON 绑定引擎会忽略使用 @JsonbTransient 注释的类属性。

[0]:http : //json-b.net/docs/user-guide.html#ignoring-properties