I have a structure with circular references.
And for debug purposes, I want to dump it. Basically as any format, but I chose JSON.
Since it can be any class, I chose GSON which doesn’t needs JAXB annotations.
But GSON hits the circular references and recurses until StackOverflowError.
How can I limit GSON to
-
ignore certain class members?
Both@XmlTransientand@JsonIgnoreare not obeyed. -
ignore certain object graph paths? E.g. I could instruct GSON not to serialize
release.customFields.product. -
go to the depth of at most 2 levels?
Related: Gson.toJson gives StackOverFlowError, how to get proper json in this case? (public static class)
Simply make the fields transient (as in
private transient int field = 4;). GSON understands that.Edit
No need for a built-in annotation; Gson lets you plug in your own strategies for excluding fields and classes. They cannot be based on a path or nesting level, but annotations and names are fine.
If I wanted to skip fields that are named “lastName” on class “my.model.Person”, I could write an exclusion strategy like this:
I could also make my own annotation:
And rewrite the
shouldSkipFieldmethod as:This would enable me to do things like:
To use a custom ExclusionStrategy, build Gson object using the builder: