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
Post a Comment