java - Jackson: having 2 different representations of a class -


i have simple user class:

public class user {     private long id;     private string username;     private string password;     private string somecommondata;     private string someadmindata; } 

i have different representations of user in json. version normal users:

{"username":"myname", "somecommondata":"bla"} 

and representation adminusers:

{"id":1, "username":"myname", "somecommondata":"bla", "someadmindata":"don't show user!"} 

when use @jsonignore ignored have conditional ignore.

the solution work far have 2 different classes. isn't there more beautiful solution?

take @ @jsonview

public class user {     @jsonview({admin.class})     private long id;      @jsonview({basic.class})     private string username;      @jsonignore     private string password;      @jsonview({basic.class})     private string somecommondata;      @jsonview({admin.class})     private string someadmindata;      static class basic {     }      static class admin extends basic {     }      public static void main(string[] args) throws jsonprocessingexception {         objectmapper mapper = new objectmapper();           user user = new user();         user.id = 1l;         user.username = "admin";         user.password = "nimda";         user.somecommondata = "common-data";         user.someadmindata = "admin-data";          objectwriter writer = mapper.writerwithdefaultprettyprinter();          system.out.println(writer.withview(basic.class).writevalueasstring(user));         system.out.println(writer.withview(admin.class).writevalueasstring(user));     } } 

output of main:

{   "username" : "admin",   "somecommondata" : "common-data" } {   "id" : 1,   "username" : "admin",   "somecommondata" : "common-data",   "someadmindata" : "admin-data" } 

this blog explains basics: http://www.baeldung.com/jackson-json-view-annotation


Comments