0

I have a requirement where I need to implement a JSON response like below,

{
  "group":{
    "name": "MyGroup"
  }
  "members": {
    "member1" : {
      "memberCity": "Mumbai",
      "memberName": "Ajay"
    },
    "member2" : {
      "memberCity": "Banglore",
      "memberName": "Vijay"
    },
    "member3" : {
      "memberCity": "Chennai",
      "memberName": "Sujay"
    }
}

What I am doing right now is I have the response model which takes in both the classes, Group Members

Members class has multiple Member objects like below,

public class Members{

@JsonProperty("member1")
private Member member1;

@JsonProperty("member2")
private Member member2;

@JsonProperty("member3")
private Member member3;

//getters and setters
}

When I am saving the group, I am getting the group object back and fetching the members, creating new ones, setting them up and setting them back to response.

Set<MemberEntity> createdGroupMembers = createdGroup.getMembers();
Members allGroupMembers = new Members();
List<Member> allMembers = new ArrayList<>();

for (MemberEntity mem : createdGroupMembers) {
Member groupMember = new Member();
groupMember.setMemberName(mem.getMemberName();
groupMember.setMemberCity(mem.getMemberCity();
allMembers.add(groupMember);
}

allGroupMembers.setMember1(allMembers.get(0));
allGroupMembers.setMember2(allMembers.get(1));

response.setMembers(allGroupMembers);

But I don't think this is a good way to implement this. Any suggestions about how this can be implemented in a better way?

Thanks for your help.

WebNoob
  • 237
  • 6
  • 16

1 Answers1

0

if you change the type of memebers to an array it could be easier to handle and maintain. The output json would become:

{
"group":{
"name": "MyGroup"
}
"members": [  // changed this from object to array.
"member1" : {
  "memberCity": "Mumbai",
  "memberName": "Ajay"
},
"member2" : {
  "memberCity": "Banglore",
  "memberName": "Vijay"
},
"member3" : {
  "memberCity": "Chennai",
  "memberName": "Sujay"
}
  ]
}

And then you can define the members as

@JsonProperty("members")
private ArrayList<Member> membersList;

Then it will be easier to add members to that list with

membersList.add(new Member());
M.Waqas Pervez
  • 2,492
  • 2
  • 19
  • 33
  • I also thought of the same, tried too. But the issue with this is, how do I name individual members with json value like member1, member2, member3 etc. Can we generate @JsonProperty dynamically for such cases? – WebNoob Oct 22 '19 at 07:36
  • You can use indexes rather then individual names for this. e.g the 0 index will be member1 and 1 index will be member 2 – M.Waqas Pervez Oct 22 '19 at 09:02
  • But then the expected JSON structure is not met. The expected JSON will then be processed by next service. I cant make the changes on my own like that. Thats why need to achieve this in the right way. – WebNoob Oct 22 '19 at 10:48