Java JSON-B的循环引用问题

Java JSON-B的循环引用问题,java,json,Java,Json,我有两个相互引用的类。当我尝试将类序列化为Json时,我得到一个循环引用错误。谁能告诉我怎么纠正这个问题吗 我有一个文件夹类,其中包含密码列表: public class Folder { private List<Password> items = new ArrayList<>(); private String name; public Folder(String name) { this.name = name;

我有两个相互引用的类。当我尝试将类序列化为Json时,我得到一个循环引用错误。谁能告诉我怎么纠正这个问题吗

我有一个文件夹类,其中包含密码列表:

public class Folder {

    private List<Password> items = new ArrayList<>();
    private String name;

    public Folder(String name) {
        this.name = name;
    }

    public void add(Password password) {
        items.add(password);
    }

    public List<Password> getItems() {
        return items;
    }

    public void setItems(List<Password> items) {
        this.items = items;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }       
}
最后是主要课程:

public class Main {

    public static void main(String[] args) throws IOException {

        Password password = new Password("Password", new Folder("Folder"));

        Jsonb jsonb = JsonbBuilder.create();        
        try (Writer writer = new StringWriter()) {          
            jsonb.toJson(password, writer);
            System.out.println(writer.toString());
        }
    }    
}
获取以下异常:

at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serialize(AbstractContainerSerializer.java:60)
    at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serializerCaptor(AbstractContainerSerializer.java:91)
    at org.eclipse.yasson.internal.serializer.CollectionSerializer.serializeInternal(CollectionSerializer.java:76)
    at org.eclipse.yasson.internal.serializer.CollectionSerializer.serializeInternal(CollectionSerializer.java:35)
    at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serialize(AbstractContainerSerializer.java:60)
    at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serializerCaptor(AbstractContainerSerializer.java:91)
    at org.eclipse.yasson.internal.serializer.ObjectSerializer.marshallProperty(ObjectSerializer.java:92)
    at org.eclipse.yasson.internal.serializer.ObjectSerializer.serializeInternal(ObjectSerializer.java:59)

当两个类相互引用时会出现此问题。您可以使用
GSONBuilder
使用
setExclutionStrategies
方法获取自定义gson对象

GSON gsonObject = new GsonBuilder()
    .setExclusionStrategies(new ExclusionStrategy() {
     /** boolean method shouldSkipClass(Class<?> clz) */
     /** boolean method shouldSkipField(FieldAttributes field) */
});
GSON gsonObject=new GsonBuilder()
.SetExclutionStrategy(新的ExclutionStrategy)(){
/**布尔方法shouldSkipClass(类clz)*/
/**布尔方法shouldSkipField(FieldAttributes字段)*/
});

密码
文件夹
中,您需要删除它们之间的引用(序列化)。您可以将
@JsonbTransient
用于不希望在JSON中序列化的字段

(文件:)

示例:
密码
类方法

示例:
文件夹
类方法

@JsonbTransient
私有列表项=新的ArrayList();

现在由您决定哪个类不会显示对另一个类的引用。另外,请参见

我使用的是JSON-B库,而不是GSON库。
GSON gsonObject = new GsonBuilder()
    .setExclusionStrategies(new ExclusionStrategy() {
     /** boolean method shouldSkipClass(Class<?> clz) */
     /** boolean method shouldSkipField(FieldAttributes field) */
});
@JsonbTransient
private Folder mFolder;
@JsonbTransient
private List<Password> items = new ArrayList<>();