简体   繁体   中英

Jackson: ignore the @JsonIgnoreProperties annotation

I have a class that I serialize and I use the @JsonIgnoreProperties at the class level to exclude some fields from it.

Lately I have an use case where I need those fields serialized.

Is there a way to make a writer/reader that ignores the annotation?

I was looking into @JsonView but it seems @JsonIgnoreProperties takes precedence over it.

@JsonFilter could help you in this case.

By defining custom json filter, Jackson will dynamically resolve filter given class uses, dynamically, allowing per-call reconfiguration of filtering.

You can find detailed explanation and usage example here

Some usefull information about dynamic ignoral you find here

I have come up with a solution, don't know if it the best one but gets the job done ...

I ended up using @JsonView.

So I have 2 views like this:

public class Views {
    public  static class Public { }
    public  static class Extended extends Public { }
}

and the default Spring mapper configured as

  mapper.setConfig(mapper.getSerializationConfig().withView(Views.Public.class));
  mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);

and the class looks like

 public class Foo{
        String name;
        @JsonView(Views.Extended.class)
        String title;
...}

By setting up a default view on the object mapper it causes it to ignore all the other not specified views. The fields with no annotation will always be serialized, as per config.

Then, when I need the whole class to be serialized I use:

objectMapper.writer().withView(Views.Extended.class).writeValueAsString(value);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM