Джексон может иметь дело с циклами в графе объектов с помощью:
@JsonIgnore
, где вы полностью опускаете свойство
@JsonManagedReference
и @JsonBackReference
- пользовательский сериализатор, который расширяет
JsonSerializer
Вы бы использовали JsonSerializer
, когда вы все еще хотите предоставить некоторую информацию об объекте, но хотите пропустить определенные поля (те, которые вызывают цикл). Например:
import org.codehaus.jackson.map.JsonSerializer
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.SerializerProvider;
import java.io.IOException;
public class ParentReferenceSerializer extends JsonSerializer<Parent> {
@Override
public void serialize(Parent parent, JsonGenerator jgen,
SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
writeNumberField(jgen, "id", parent.getId());
// ... other fields ...
jgen.writeEndObject();
}
}
Тогда в классе, в котором выполняется сериализация, вы должны использовать аннотацию @JsonSerialize
:
@JsonSerialize(using = ParentReferenceSerializer.class)
public Parent getParent() {
return parent;
}