How to add @JsonIgnore annotated fields in serializing in Jackson ObectMapper

我的未来我决定 提交于 2021-02-05 11:30:49

问题


I need to add @JsonIgnore annotated fields while serializing an object by Jackson ObjectMapper. I know you may offer me to remove the @JsonIgnore annotation from my class, but I need they are ignorable in some part of my application. And in another part of my application I need to have those @JsonIgnore annotated fields in my json string.


回答1:


You can define a SimpleBeanPropertyFilter and FilterProvider.

First annotate your class with custom filter like this:

@JsonFilter("firstFilter")
public class MyDtoWithFilter {

    private String name;

    private String anotherName;
    private SecondDtoWithFilter dtoWith;

    // get set ....
}
 @JsonFilter("secondFilter")
public class SecondDtoWithFilter{
    private long id;
    private String secondName;
}

and this is how you will dynamically serialise your object.

    ObjectMapper mapper = new ObjectMapper();

    // Field that not to be serialised. 
    SimpleBeanPropertyFilter firstFilter = SimpleBeanPropertyFilter.serializeAllExcept("anotherName");
     SimpleBeanPropertyFilter secondFilter = SimpleBeanPropertyFilter.serializeAllExcept("secondName");

    FilterProvider filters = new SimpleFilterProvider().addFilter("firstFilter", firstFilter).addFilter("secondFilter", secondFilter);

    MyDtoWithFilter dtoObject = new MyDtoWithFilter();
    String dtoAsString = mapper.writer(filters).writeValueAsString(dtoObject);



回答2:


I would suggest removing and re-adding them programmatically via reflection when your specific mapping is happening.




回答3:


That suggests to me you have two different models with some common elements. I would reexamine your model.




回答4:


public class MainProgram {
    @JsonFilter("nameRemoveFilter")
    public static class User{

        private String name;

        private String age;

        private String password;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAge() {
            return age;
        }

        public void setAge(String age) {
            this.age = age;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }



    }

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider().addFilter("nameRemoveFilter",
                SimpleBeanPropertyFilter.filterOutAllExcept("name","age"));
            // and then serialize using that filter provider:
            User user = new User();
            try {
                String json = mapper.writer(filters).writeValueAsString(user);
                System.out.println(json);
            } catch (JsonProcessingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }


    Works for Latest version of Jackson after 2.0


来源:https://stackoverflow.com/questions/35672131/how-to-add-jsonignore-annotated-fields-in-serializing-in-jackson-obectmapper

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!