У меня есть класс User
, определенный как:
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;
}
}
Я вызываю REST API, который возвращает следующий ответ:
{
"username1":{
"456":[
],
"123":[
],
"789":[
]
},
"username2":{
"123":[
],
"456":[
],
"789":[
]
},
"username3":{
"789":[
],
"123":[
],
"456":[
"transaction10",
"transaction6",
"transaction9",
"transaction3"
]
}
}
Я хотел бы иметь возможность проанализировать ответ и сохранить его в User
объекте.
Я пробовал следующее:
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());
}
}
}
}
Это приводит к выводу:
{username1=model.User@80ec1f8, username2=model.User@1445d7f, username3=model.User@6a396c1e}
username: username1
transactions: null
username: username2
transactions: null
username: username3
transactions: null
Я ожидаю вывод:
{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=[]}
Как я могу проанализировать accountId
исписок transactionIds
в свою собственную карту в качестве переменной в моем User
классе?
Редактировать: Я полагаю, что вопрос действительно становится, как я могу создать пользовательский TypeToken
для моего User
класса?