Why jackson is serializing transient member also?
A new way to stop Jackson from serializing and deserializing is to call mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true)
.
I can't make comments so complete the previous response here, changing the (now) deprecated method setVisibilityChecker
and adding a missing clause for booleans:
mapper.setVisibility(
mapper.getSerializationConfig().
getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).
withGetterVisibility(JsonAutoDetect.Visibility.NONE).
withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
);
The reason Jackson serializes the transient
member is because the getters are used to determine what to serialize, not the member itself - and since y
has a public getter, that gets serialized.
If you want to change that default and have Jackson use fields - simply do:
om.setVisibilityChecker(
om.getSerializationConfig()
.getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
);
Another way to ignore a property on serialization is to do it directly on the class:
@JsonIgnoreProperties(value = { "y" })
public class TestElement {
...
And another way is directly on the field:
public class TestElement {
@JsonIgnore
private String y;
...
Hope this helps.
You can configure it with springs properties
spring.jackson.mapper.propagate-transient-marker=true