Why jackson is serializing transient member also?

前端 未结 4 1667
花落未央
花落未央 2021-02-01 13:53

I am serializing a POJO into JSON using Jackson 2.1.4 but I want to ignore a particular field from getting serialized. I used transient but still it is serializing that element.

4条回答
  •  故里飘歌
    2021-02-01 14:22

    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.

提交回复
热议问题