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.
- Maybe consider using a Jackson module?fge– fge2016-02-27 16:27:13 +00:00Commented Feb 27, 2016 at 16:27
Add a comment |
4 Answers
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); 4 Comments
gabby
Thank you for the answer. How can I add sub field in serializeAllExcept? I mean I have a class and one attribute of this class is another class. And this class also has some fields which should serialized or not
PyThon
then in that case you must add the full path to your property. updating answer code above for this. Happy Coding !! :)
gabby
Unfortunately, it did not work. I still can see innerProperty2 inb my json string. but attribute1 is not in json as expected.
PyThon
@gabby please edit my answer as well with your working code of nested properties. It will help others. Thanks
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