I have a User class defined as:
User.java
package model;
import java.util.List;
import java.util.Map;
public class User {
    private final Map<String, List<String>> accountTransactionsMap;
    public User(final Map<String, List<String>> accountTransactionsMap) {
        this.accountTransactionsMap = accountTransactionsMap;
    }
    public Map<String, List<String>> getAccountTransactionsMap() {
        return accountTransactionsMap;
    }
}
I am calling a REST API that returns the following response:
{  
   "username1":{  
      "456":[  
      ],
      "123":[  
      ],
      "789":[  
      ]
   },
   "username2":{  
      "123":[  
      ],
      "456":[  
      ],
      "789":[  
      ]
   },
   "username3":{  
      "789":[  
      ],
      "123":[  
      ],
      "456":[  
         "transaction10",
         "transaction6",
         "transaction9",
         "transaction3"
      ]
   }
}
I would like to be able to parse through the response and store it in a User object.
I have tried the following:
Test.java
public class Test {
    public static void main(final String[] args) {
        final String response = "{\"username1\":{\"456\":[],\"123\":[],\"789\":[]},\"username2\":{\"123\":[],\"456\":[],\"789\":[]},\"username3\":{\"789\":[],\"123\":[],\"456\":[\"transaction10\",\"transaction6\",\"transaction9\",\"transaction3\"]}}";
        final Gson gson = new Gson();
        final Type map = new TypeToken<Map<String, User>>(){}.getType();
        final Map<String, User> result = gson.fromJson(response, map);
        System.out.println(result);
        if (result != null) {
            for (final Map.Entry<String, User> entry : result.entrySet()) {
                System.out.println("username: " + entry.getKey());
                final User user = entry.getValue();
                System.out.println("transactions: " + user.getAccountTransactionsMap());
            }
        }
    }
}
This yields output:
{username1=model.User@80ec1f8, username2=model.User@1445d7f, username3=model.User@6a396c1e}
username: username1
transactions: null
username: username2
transactions: null
username: username3
transactions: null
I expect output:
{username1=model.User@80ec1f8, username2=model.User@1445d7f, username3=model.User@6a396c1e}
username: username1
transactions: {123=[],456=[],789=[]}
username: username2
transactions: {123=[],456=[],789=[]}
username: username3
transactions: {123=[],456=["transaction10", "transaction6", "transaction9", "transaction3"],789=[]}
How can I parse the accountId and the list of transactionIds into its own map as a variable in my User class?
Edit: I suppose the question really becomes, how can I create a custom TypeToken for my User class?
 
    