java - Serializing List<Item> to JSON with custom fields -


i'm trying create simple rest api spring mvc, returns data in json format.

i'm working on method returns list of authors, that's accessed example.com/api/authors?find=somename

i have jpa entity called authors. have @service fetches list<author> collection. author entity has properties, id, firstname, lastname, birthdate.

what i'm trying achieve json result like:

{     "data": [         {             "id": 1,             "name": "leo tolstoi",             "age": 49         },         {             "id": 2,             "name": "billy shakespeare",             "age": 32         }     ] } 

as can see, result has 2 fields not directly entity, rather should generated author entity's values. name field author.getfirstname() + " " + author.getlastname() , age someutilityclass.calcage(author.getbirthdate())

i'm trying figure out how sort of output using gson.

what do, fetch data service class , iterate on it, saving each iteration row map (or something, maybe save each row list<authorjson> entity, has fields id, name, age). approach doesn't seem clean.

can guys suggest solutions?

you should use custom serializer author.

documentation

since need serializer, here example of can do. note age off 1 of time.

public static void main(string[] args) {     gsonbuilder gbuild = new gsonbuilder();     gbuild.registertypeadapter(author.class, new authorserializer());      author author = new author();     calendar cal = calendar.getinstance();     cal.set(calendar.year, 1988);     cal.set(calendar.month, 1);     cal.set(calendar.day_of_month, 1);     author.setbirthdate(cal);     author.setfirstname("john");     author.setlastname("smith");      gson gson = gbuild.setprettyprinting().create();     system.out.println(gson.tojson(author)); }  private static class authorserializer implements jsonserializer<author> {     @override     public jsonelement serialize(author src, type typeofsrc, jsonserializationcontext context) {         calendar today = calendar.getinstance();         int age = today.get(calendar.year) - src.getbirthdate().get(calendar.year);         string fullname = src.getfirstname() + " " + src.getlastname();         jsonobject obj = new jsonobject();         obj.addproperty("fullname", fullname);         obj.addproperty("age", age);         return obj;     } } 

Comments

Popular posts from this blog

javascript - Count length of each class -

What design pattern is this code in Javascript? -

hadoop - Restrict secondarynamenode to be installed and run on any other node in the cluster -