how to specify jackson to only use fields - preferably globally





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







166















Default jackon behaviour seems to use both properties (getters and setters) and fields to serialize and deserialize to json.



I would like to use the fields as the canonical source of serialization config and thus don't want jackson to look at properties at all.



I can do this on an individual class basis with the annotation:



 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


But I don't want to have to put this on every single class...



Is it possible to configure this globally? Like add some to the Object Mapper?










share|improve this question




















  • 1





    Tim gave a good answer. Another possibility is that if you have a common base class, you can put class annotations to that one; annotations are inherited by Jackson.

    – StaxMan
    Aug 18 '11 at 18:44






  • 1





    I think I tried that, but it seems you have to tell the sub classes to use what the base case defines...

    – Michael Wiles
    Aug 19 '11 at 8:40






  • 2





    No, unless sub-class overrides class annotation, parent's annotations are visible as if they were part of sub-class definition (if not, this would be a bug). This is not necessarily how JDK deals with annotations, but Jackson implements full inheritance for annotations (even for method annotations).

    – StaxMan
    Aug 19 '11 at 18:10











  • Beware of the INFER_PROPERTY_MUTATORS flag. It forces the visibility of setters if there is a visible getter or field.

    – Ondra Žižka
    Jun 17 '18 at 23:43











  • And others.

    – Ondra Žižka
    Jun 18 '18 at 2:50


















166















Default jackon behaviour seems to use both properties (getters and setters) and fields to serialize and deserialize to json.



I would like to use the fields as the canonical source of serialization config and thus don't want jackson to look at properties at all.



I can do this on an individual class basis with the annotation:



 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


But I don't want to have to put this on every single class...



Is it possible to configure this globally? Like add some to the Object Mapper?










share|improve this question




















  • 1





    Tim gave a good answer. Another possibility is that if you have a common base class, you can put class annotations to that one; annotations are inherited by Jackson.

    – StaxMan
    Aug 18 '11 at 18:44






  • 1





    I think I tried that, but it seems you have to tell the sub classes to use what the base case defines...

    – Michael Wiles
    Aug 19 '11 at 8:40






  • 2





    No, unless sub-class overrides class annotation, parent's annotations are visible as if they were part of sub-class definition (if not, this would be a bug). This is not necessarily how JDK deals with annotations, but Jackson implements full inheritance for annotations (even for method annotations).

    – StaxMan
    Aug 19 '11 at 18:10











  • Beware of the INFER_PROPERTY_MUTATORS flag. It forces the visibility of setters if there is a visible getter or field.

    – Ondra Žižka
    Jun 17 '18 at 23:43











  • And others.

    – Ondra Žižka
    Jun 18 '18 at 2:50














166












166








166


53






Default jackon behaviour seems to use both properties (getters and setters) and fields to serialize and deserialize to json.



I would like to use the fields as the canonical source of serialization config and thus don't want jackson to look at properties at all.



I can do this on an individual class basis with the annotation:



 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


But I don't want to have to put this on every single class...



Is it possible to configure this globally? Like add some to the Object Mapper?










share|improve this question
















Default jackon behaviour seems to use both properties (getters and setters) and fields to serialize and deserialize to json.



I would like to use the fields as the canonical source of serialization config and thus don't want jackson to look at properties at all.



I can do this on an individual class basis with the annotation:



 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


But I don't want to have to put this on every single class...



Is it possible to configure this globally? Like add some to the Object Mapper?







java json jackson






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 4 '14 at 21:57









lukk

2,50012231




2,50012231










asked Aug 18 '11 at 10:10









Michael WilesMichael Wiles

15k165692




15k165692








  • 1





    Tim gave a good answer. Another possibility is that if you have a common base class, you can put class annotations to that one; annotations are inherited by Jackson.

    – StaxMan
    Aug 18 '11 at 18:44






  • 1





    I think I tried that, but it seems you have to tell the sub classes to use what the base case defines...

    – Michael Wiles
    Aug 19 '11 at 8:40






  • 2





    No, unless sub-class overrides class annotation, parent's annotations are visible as if they were part of sub-class definition (if not, this would be a bug). This is not necessarily how JDK deals with annotations, but Jackson implements full inheritance for annotations (even for method annotations).

    – StaxMan
    Aug 19 '11 at 18:10











  • Beware of the INFER_PROPERTY_MUTATORS flag. It forces the visibility of setters if there is a visible getter or field.

    – Ondra Žižka
    Jun 17 '18 at 23:43











  • And others.

    – Ondra Žižka
    Jun 18 '18 at 2:50














  • 1





    Tim gave a good answer. Another possibility is that if you have a common base class, you can put class annotations to that one; annotations are inherited by Jackson.

    – StaxMan
    Aug 18 '11 at 18:44






  • 1





    I think I tried that, but it seems you have to tell the sub classes to use what the base case defines...

    – Michael Wiles
    Aug 19 '11 at 8:40






  • 2





    No, unless sub-class overrides class annotation, parent's annotations are visible as if they were part of sub-class definition (if not, this would be a bug). This is not necessarily how JDK deals with annotations, but Jackson implements full inheritance for annotations (even for method annotations).

    – StaxMan
    Aug 19 '11 at 18:10











  • Beware of the INFER_PROPERTY_MUTATORS flag. It forces the visibility of setters if there is a visible getter or field.

    – Ondra Žižka
    Jun 17 '18 at 23:43











  • And others.

    – Ondra Žižka
    Jun 18 '18 at 2:50








1




1





Tim gave a good answer. Another possibility is that if you have a common base class, you can put class annotations to that one; annotations are inherited by Jackson.

– StaxMan
Aug 18 '11 at 18:44





Tim gave a good answer. Another possibility is that if you have a common base class, you can put class annotations to that one; annotations are inherited by Jackson.

– StaxMan
Aug 18 '11 at 18:44




1




1





I think I tried that, but it seems you have to tell the sub classes to use what the base case defines...

– Michael Wiles
Aug 19 '11 at 8:40





I think I tried that, but it seems you have to tell the sub classes to use what the base case defines...

– Michael Wiles
Aug 19 '11 at 8:40




2




2





No, unless sub-class overrides class annotation, parent's annotations are visible as if they were part of sub-class definition (if not, this would be a bug). This is not necessarily how JDK deals with annotations, but Jackson implements full inheritance for annotations (even for method annotations).

– StaxMan
Aug 19 '11 at 18:10





No, unless sub-class overrides class annotation, parent's annotations are visible as if they were part of sub-class definition (if not, this would be a bug). This is not necessarily how JDK deals with annotations, but Jackson implements full inheritance for annotations (even for method annotations).

– StaxMan
Aug 19 '11 at 18:10













Beware of the INFER_PROPERTY_MUTATORS flag. It forces the visibility of setters if there is a visible getter or field.

– Ondra Žižka
Jun 17 '18 at 23:43





Beware of the INFER_PROPERTY_MUTATORS flag. It forces the visibility of setters if there is a visible getter or field.

– Ondra Žižka
Jun 17 '18 at 23:43













And others.

– Ondra Žižka
Jun 18 '18 at 2:50





And others.

– Ondra Žižka
Jun 18 '18 at 2:50












5 Answers
5






active

oldest

votes


















136














You can configure individual ObjectMappers like this:



ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));


If you want it set globally, I usually access a configured mapper through a wrapper class.






share|improve this answer





















  • 3





    Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

    – StaxMan
    Aug 18 '11 at 18:43











  • @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

    – Kevin Bowersox
    Sep 29 '11 at 18:27






  • 36





    withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

    – qerub
    May 12 '12 at 19:23








  • 11





    setVisibilityCheckeris deprecated. Use setVisibility instead.

    – h3nrik
    Apr 6 '16 at 12:09



















133














In Jackson 2.0 and later you can simply use:



import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;

...

ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);


to turn off autodetection.






share|improve this answer



















  • 1





    Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

    – jrhamza
    Nov 23 '13 at 22:01






  • 6





    You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

    – lukk
    Nov 25 '13 at 16:07













  • Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

    – philburns
    Mar 26 at 15:44



















27














Specifically for boolean is*() getters:



I've spend a lot of time on why neither below



  @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


nor this



  setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);


worked for my Boolean Getter/Setter.



Solution is simple:



  @JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...          
setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);


UPDATE: spring-boot allowed configure it:



jackson:
visibility.field: any
visibility.getter: none
visibility.setter: none
visibility.is-getter: none


See Common application properties # JACKSON






share|improve this answer





















  • 1





    Could you elaborate how simple solution should be applied to bean class?

    – Pavel Niedoba
    Mar 18 '16 at 9:33






  • 1





    Thank you. That isGetter saved the day for me.

    – grinch
    Mar 4 '17 at 16:47











  • This is not an answer to the question and is rather misleading.

    – Ondra Žižka
    Jun 17 '18 at 23:15



















12














for jackson 1.9.10 I use



ObjectMapper mapper = new ObjectMapper();

mapper.setVisibility(JsonMethod.ALL, Visibility.NONE);
mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);


to turn of auto dedection.






share|improve this answer



















  • 1





    That is the way. Thanks.

    – cuneytykaya
    Feb 27 '14 at 16:22











  • wonder if there's any difference between doing this and disabling the "auto detects".

    – xenoterracide
    Jan 27 '16 at 22:52



















10














How about this: I used it with a mixin



non-compliant object



@Entity
@Getter
@NoArgsConstructor
public class Telemetry {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long pk;
private String id;
private String organizationId;
private String baseType;
private String name;
private Double lat;
private Double lon;
private Instant updateTimestamp;
}


Mixin:



@JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE, setterVisibility = NONE)
public static class TelemetryMixin {}


Usage:



    ObjectMapper om = objectMapper.addMixIn(Telemetry.class, TelemetryMixin.class);
Telemetry telemetries = om.readValue(someJson, Telemetry.class);


There is nothing that says you couldn't foreach any number of classes and apply the same mixin.



If you're not familiar with mixins, they are conceptually simply: The structure of the mixin is super imposed on the target class (according to jackson, not as far as the JVM is concerned).






share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f7105745%2fhow-to-specify-jackson-to-only-use-fields-preferably-globally%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    5 Answers
    5






    active

    oldest

    votes








    5 Answers
    5






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    136














    You can configure individual ObjectMappers like this:



    ObjectMapper mapper  = new ObjectMapper();
    mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
    .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
    .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));


    If you want it set globally, I usually access a configured mapper through a wrapper class.






    share|improve this answer





















    • 3





      Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

      – StaxMan
      Aug 18 '11 at 18:43











    • @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

      – Kevin Bowersox
      Sep 29 '11 at 18:27






    • 36





      withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

      – qerub
      May 12 '12 at 19:23








    • 11





      setVisibilityCheckeris deprecated. Use setVisibility instead.

      – h3nrik
      Apr 6 '16 at 12:09
















    136














    You can configure individual ObjectMappers like this:



    ObjectMapper mapper  = new ObjectMapper();
    mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
    .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
    .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));


    If you want it set globally, I usually access a configured mapper through a wrapper class.






    share|improve this answer





















    • 3





      Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

      – StaxMan
      Aug 18 '11 at 18:43











    • @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

      – Kevin Bowersox
      Sep 29 '11 at 18:27






    • 36





      withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

      – qerub
      May 12 '12 at 19:23








    • 11





      setVisibilityCheckeris deprecated. Use setVisibility instead.

      – h3nrik
      Apr 6 '16 at 12:09














    136












    136








    136







    You can configure individual ObjectMappers like this:



    ObjectMapper mapper  = new ObjectMapper();
    mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
    .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
    .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));


    If you want it set globally, I usually access a configured mapper through a wrapper class.






    share|improve this answer















    You can configure individual ObjectMappers like this:



    ObjectMapper mapper  = new ObjectMapper();
    mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
    .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
    .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
    .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));


    If you want it set globally, I usually access a configured mapper through a wrapper class.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Sep 29 '11 at 18:26









    Kevin Bowersox

    79.4k14124165




    79.4k14124165










    answered Aug 18 '11 at 13:53









    Tim HelmstedtTim Helmstedt

    2,1051169




    2,1051169








    • 3





      Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

      – StaxMan
      Aug 18 '11 at 18:43











    • @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

      – Kevin Bowersox
      Sep 29 '11 at 18:27






    • 36





      withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

      – qerub
      May 12 '12 at 19:23








    • 11





      setVisibilityCheckeris deprecated. Use setVisibility instead.

      – h3nrik
      Apr 6 '16 at 12:09














    • 3





      Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

      – StaxMan
      Aug 18 '11 at 18:43











    • @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

      – Kevin Bowersox
      Sep 29 '11 at 18:27






    • 36





      withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

      – qerub
      May 12 '12 at 19:23








    • 11





      setVisibilityCheckeris deprecated. Use setVisibility instead.

      – h3nrik
      Apr 6 '16 at 12:09








    3




    3





    Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

    – StaxMan
    Aug 18 '11 at 18:43





    Good, although I think you may need to also set the checker (withXxx() methods usually create a new object). So something like 'mapper.setVisibilityChecker(mapper.getVisibilityChecker().with...);'

    – StaxMan
    Aug 18 '11 at 18:43













    @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

    – Kevin Bowersox
    Sep 29 '11 at 18:27





    @StaxMan good call on setVisibilityChecker, I edited the answer to reflect.

    – Kevin Bowersox
    Sep 29 '11 at 18:27




    36




    36





    withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

    – qerub
    May 12 '12 at 19:23







    withGetterVisibility doesn't cover is* methods, but there's withIsGetterVisibility for them.

    – qerub
    May 12 '12 at 19:23






    11




    11





    setVisibilityCheckeris deprecated. Use setVisibility instead.

    – h3nrik
    Apr 6 '16 at 12:09





    setVisibilityCheckeris deprecated. Use setVisibility instead.

    – h3nrik
    Apr 6 '16 at 12:09













    133














    In Jackson 2.0 and later you can simply use:



    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;

    ...

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);


    to turn off autodetection.






    share|improve this answer



















    • 1





      Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

      – jrhamza
      Nov 23 '13 at 22:01






    • 6





      You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

      – lukk
      Nov 25 '13 at 16:07













    • Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

      – philburns
      Mar 26 at 15:44
















    133














    In Jackson 2.0 and later you can simply use:



    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;

    ...

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);


    to turn off autodetection.






    share|improve this answer



















    • 1





      Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

      – jrhamza
      Nov 23 '13 at 22:01






    • 6





      You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

      – lukk
      Nov 25 '13 at 16:07













    • Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

      – philburns
      Mar 26 at 15:44














    133












    133








    133







    In Jackson 2.0 and later you can simply use:



    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;

    ...

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);


    to turn off autodetection.






    share|improve this answer













    In Jackson 2.0 and later you can simply use:



    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;

    ...

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);


    to turn off autodetection.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 21 '12 at 14:23









    lukklukk

    2,50012231




    2,50012231








    • 1





      Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

      – jrhamza
      Nov 23 '13 at 22:01






    • 6





      You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

      – lukk
      Nov 25 '13 at 16:07













    • Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

      – philburns
      Mar 26 at 15:44














    • 1





      Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

      – jrhamza
      Nov 23 '13 at 22:01






    • 6





      You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

      – lukk
      Nov 25 '13 at 16:07













    • Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

      – philburns
      Mar 26 at 15:44








    1




    1





    Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

    – jrhamza
    Nov 23 '13 at 22:01





    Hi guys, I am using Jackson 1.9.0 jar. I am getting additional json property, while serializing object to json string. I need to get the json string, which contains only mentioned variables with @JsonProperty. Can you please help me on this ?

    – jrhamza
    Nov 23 '13 at 22:01




    6




    6





    You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

    – lukk
    Nov 25 '13 at 16:07







    You can start with class annotation mentioned in OP question: @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) Next, you have to annotate each property you want to include with @JsonProperty

    – lukk
    Nov 25 '13 at 16:07















    Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

    – philburns
    Mar 26 at 15:44





    Thanks! Before, I've found many code examples where JsonMethod was referenced instead of PropertyAccessor. If you search for JsonMethod, you rarely get links to PropertyAccessor then... What is the best way to find replacement class names in successor artifacts? Can be tough and nasty, no?

    – philburns
    Mar 26 at 15:44











    27














    Specifically for boolean is*() getters:



    I've spend a lot of time on why neither below



      @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


    nor this



      setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);


    worked for my Boolean Getter/Setter.



    Solution is simple:



      @JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...          
    setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);


    UPDATE: spring-boot allowed configure it:



    jackson:
    visibility.field: any
    visibility.getter: none
    visibility.setter: none
    visibility.is-getter: none


    See Common application properties # JACKSON






    share|improve this answer





















    • 1





      Could you elaborate how simple solution should be applied to bean class?

      – Pavel Niedoba
      Mar 18 '16 at 9:33






    • 1





      Thank you. That isGetter saved the day for me.

      – grinch
      Mar 4 '17 at 16:47











    • This is not an answer to the question and is rather misleading.

      – Ondra Žižka
      Jun 17 '18 at 23:15
















    27














    Specifically for boolean is*() getters:



    I've spend a lot of time on why neither below



      @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


    nor this



      setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);


    worked for my Boolean Getter/Setter.



    Solution is simple:



      @JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...          
    setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);


    UPDATE: spring-boot allowed configure it:



    jackson:
    visibility.field: any
    visibility.getter: none
    visibility.setter: none
    visibility.is-getter: none


    See Common application properties # JACKSON






    share|improve this answer





















    • 1





      Could you elaborate how simple solution should be applied to bean class?

      – Pavel Niedoba
      Mar 18 '16 at 9:33






    • 1





      Thank you. That isGetter saved the day for me.

      – grinch
      Mar 4 '17 at 16:47











    • This is not an answer to the question and is rather misleading.

      – Ondra Žižka
      Jun 17 '18 at 23:15














    27












    27








    27







    Specifically for boolean is*() getters:



    I've spend a lot of time on why neither below



      @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


    nor this



      setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);


    worked for my Boolean Getter/Setter.



    Solution is simple:



      @JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...          
    setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);


    UPDATE: spring-boot allowed configure it:



    jackson:
    visibility.field: any
    visibility.getter: none
    visibility.setter: none
    visibility.is-getter: none


    See Common application properties # JACKSON






    share|improve this answer















    Specifically for boolean is*() getters:



    I've spend a lot of time on why neither below



      @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)


    nor this



      setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
    setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);


    worked for my Boolean Getter/Setter.



    Solution is simple:



      @JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...          
    setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);


    UPDATE: spring-boot allowed configure it:



    jackson:
    visibility.field: any
    visibility.getter: none
    visibility.setter: none
    visibility.is-getter: none


    See Common application properties # JACKSON







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Mar 19 at 9:20

























    answered Jul 20 '14 at 13:28









    GKislinGKislin

    8,096347105




    8,096347105








    • 1





      Could you elaborate how simple solution should be applied to bean class?

      – Pavel Niedoba
      Mar 18 '16 at 9:33






    • 1





      Thank you. That isGetter saved the day for me.

      – grinch
      Mar 4 '17 at 16:47











    • This is not an answer to the question and is rather misleading.

      – Ondra Žižka
      Jun 17 '18 at 23:15














    • 1





      Could you elaborate how simple solution should be applied to bean class?

      – Pavel Niedoba
      Mar 18 '16 at 9:33






    • 1





      Thank you. That isGetter saved the day for me.

      – grinch
      Mar 4 '17 at 16:47











    • This is not an answer to the question and is rather misleading.

      – Ondra Žižka
      Jun 17 '18 at 23:15








    1




    1





    Could you elaborate how simple solution should be applied to bean class?

    – Pavel Niedoba
    Mar 18 '16 at 9:33





    Could you elaborate how simple solution should be applied to bean class?

    – Pavel Niedoba
    Mar 18 '16 at 9:33




    1




    1





    Thank you. That isGetter saved the day for me.

    – grinch
    Mar 4 '17 at 16:47





    Thank you. That isGetter saved the day for me.

    – grinch
    Mar 4 '17 at 16:47













    This is not an answer to the question and is rather misleading.

    – Ondra Žižka
    Jun 17 '18 at 23:15





    This is not an answer to the question and is rather misleading.

    – Ondra Žižka
    Jun 17 '18 at 23:15











    12














    for jackson 1.9.10 I use



    ObjectMapper mapper = new ObjectMapper();

    mapper.setVisibility(JsonMethod.ALL, Visibility.NONE);
    mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);


    to turn of auto dedection.






    share|improve this answer



















    • 1





      That is the way. Thanks.

      – cuneytykaya
      Feb 27 '14 at 16:22











    • wonder if there's any difference between doing this and disabling the "auto detects".

      – xenoterracide
      Jan 27 '16 at 22:52
















    12














    for jackson 1.9.10 I use



    ObjectMapper mapper = new ObjectMapper();

    mapper.setVisibility(JsonMethod.ALL, Visibility.NONE);
    mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);


    to turn of auto dedection.






    share|improve this answer



















    • 1





      That is the way. Thanks.

      – cuneytykaya
      Feb 27 '14 at 16:22











    • wonder if there's any difference between doing this and disabling the "auto detects".

      – xenoterracide
      Jan 27 '16 at 22:52














    12












    12








    12







    for jackson 1.9.10 I use



    ObjectMapper mapper = new ObjectMapper();

    mapper.setVisibility(JsonMethod.ALL, Visibility.NONE);
    mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);


    to turn of auto dedection.






    share|improve this answer













    for jackson 1.9.10 I use



    ObjectMapper mapper = new ObjectMapper();

    mapper.setVisibility(JsonMethod.ALL, Visibility.NONE);
    mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);


    to turn of auto dedection.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Feb 27 '14 at 16:17









    mfemfe

    22437




    22437








    • 1





      That is the way. Thanks.

      – cuneytykaya
      Feb 27 '14 at 16:22











    • wonder if there's any difference between doing this and disabling the "auto detects".

      – xenoterracide
      Jan 27 '16 at 22:52














    • 1





      That is the way. Thanks.

      – cuneytykaya
      Feb 27 '14 at 16:22











    • wonder if there's any difference between doing this and disabling the "auto detects".

      – xenoterracide
      Jan 27 '16 at 22:52








    1




    1





    That is the way. Thanks.

    – cuneytykaya
    Feb 27 '14 at 16:22





    That is the way. Thanks.

    – cuneytykaya
    Feb 27 '14 at 16:22













    wonder if there's any difference between doing this and disabling the "auto detects".

    – xenoterracide
    Jan 27 '16 at 22:52





    wonder if there's any difference between doing this and disabling the "auto detects".

    – xenoterracide
    Jan 27 '16 at 22:52











    10














    How about this: I used it with a mixin



    non-compliant object



    @Entity
    @Getter
    @NoArgsConstructor
    public class Telemetry {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long pk;
    private String id;
    private String organizationId;
    private String baseType;
    private String name;
    private Double lat;
    private Double lon;
    private Instant updateTimestamp;
    }


    Mixin:



    @JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE, setterVisibility = NONE)
    public static class TelemetryMixin {}


    Usage:



        ObjectMapper om = objectMapper.addMixIn(Telemetry.class, TelemetryMixin.class);
    Telemetry telemetries = om.readValue(someJson, Telemetry.class);


    There is nothing that says you couldn't foreach any number of classes and apply the same mixin.



    If you're not familiar with mixins, they are conceptually simply: The structure of the mixin is super imposed on the target class (according to jackson, not as far as the JVM is concerned).






    share|improve this answer




























      10














      How about this: I used it with a mixin



      non-compliant object



      @Entity
      @Getter
      @NoArgsConstructor
      public class Telemetry {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long pk;
      private String id;
      private String organizationId;
      private String baseType;
      private String name;
      private Double lat;
      private Double lon;
      private Instant updateTimestamp;
      }


      Mixin:



      @JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE, setterVisibility = NONE)
      public static class TelemetryMixin {}


      Usage:



          ObjectMapper om = objectMapper.addMixIn(Telemetry.class, TelemetryMixin.class);
      Telemetry telemetries = om.readValue(someJson, Telemetry.class);


      There is nothing that says you couldn't foreach any number of classes and apply the same mixin.



      If you're not familiar with mixins, they are conceptually simply: The structure of the mixin is super imposed on the target class (according to jackson, not as far as the JVM is concerned).






      share|improve this answer


























        10












        10








        10







        How about this: I used it with a mixin



        non-compliant object



        @Entity
        @Getter
        @NoArgsConstructor
        public class Telemetry {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long pk;
        private String id;
        private String organizationId;
        private String baseType;
        private String name;
        private Double lat;
        private Double lon;
        private Instant updateTimestamp;
        }


        Mixin:



        @JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE, setterVisibility = NONE)
        public static class TelemetryMixin {}


        Usage:



            ObjectMapper om = objectMapper.addMixIn(Telemetry.class, TelemetryMixin.class);
        Telemetry telemetries = om.readValue(someJson, Telemetry.class);


        There is nothing that says you couldn't foreach any number of classes and apply the same mixin.



        If you're not familiar with mixins, they are conceptually simply: The structure of the mixin is super imposed on the target class (according to jackson, not as far as the JVM is concerned).






        share|improve this answer













        How about this: I used it with a mixin



        non-compliant object



        @Entity
        @Getter
        @NoArgsConstructor
        public class Telemetry {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long pk;
        private String id;
        private String organizationId;
        private String baseType;
        private String name;
        private Double lat;
        private Double lon;
        private Instant updateTimestamp;
        }


        Mixin:



        @JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE, setterVisibility = NONE)
        public static class TelemetryMixin {}


        Usage:



            ObjectMapper om = objectMapper.addMixIn(Telemetry.class, TelemetryMixin.class);
        Telemetry telemetries = om.readValue(someJson, Telemetry.class);


        There is nothing that says you couldn't foreach any number of classes and apply the same mixin.



        If you're not familiar with mixins, they are conceptually simply: The structure of the mixin is super imposed on the target class (according to jackson, not as far as the JVM is concerned).







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 21 '16 at 17:14









        Christian BongiornoChristian Bongiorno

        2,4131543




        2,4131543






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f7105745%2fhow-to-specify-jackson-to-only-use-fields-preferably-globally%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith