2013-11-26 3 views
0

Следуя за моим previous question, я могу вернуть список групп в разделе пользовательских атрибутов, однако я хотел бы знать, что мне нужно сделать, чтобы вернуть их в std структуру JSON.Возвращение массивов JSON в customAttributes

Если я отправить обратно список Java

HashMap<String, Object> customAttributes = new HashMap<String, Object>(); 
customAttributes.put("AuthenticationDate", new Date()); 
List<String> groups = new ArrayList<String>(); 
groups.add("Users"); 
groups.add("Managers"); 
customAttributes.put("Groups", groups); 
UserIdentity identity = new UserIdentity(loginModule, USERNAME, "Fred Flintstone", null, customAttributes, PASSWORD); 

Затем клиент получает

{"Groups":"[Users, Managers]","AuthenticationDate":"Tue Nov 26 12:07:37 EST 2013"} 

Если добавить группы в HashMap

List<Map<String, Object>> groups = new ArrayList<Map<String, Object>>(); 
HashMap<String, Object> groupMap1 = new HashMap<String, Object>(); 
groupMap1.put("id", "Users"); 
groups.add(groupMap1); 
HashMap<String, Object> groupMap2 = new HashMap<String, Object>(); 
groupMap2.put("id", "Managers"); 
groups.add(groupMap2); 
customAttributes.put("Groups", groups); 

UserIdentity identity = new UserIdentity(loginModule, USERNAME, "Fred Flintstone", null, customAttributes, PASSWORD); 

я получаю следующий ответ в клиент

"attributes":{"Groups":"[{id=Users}, {id=Managers}]","AuthenticationDate":"Tue Nov 26 12:13:40 EST 2013"} 

То, что я бы очень хотел, чтобы получить что-то вроде этого

"attributes":{"Groups":[{"id" : "Users"}, {"id" :"Managers"}],"AuthenticationDate":"Tue Nov 26 12:13:40 EST 2013"} 

ответ

1

Для того, чтобы сделать это, вам нужно преобразовать группы HashMap в объект JSON, прежде чем положить его в атрибуты HashMap.

Что-то вроде:

... 
groups.add(groupMap1); 
groups.add(groupMap2); 
customAttributes.put("Groups", JSONObject(groups)); 

Синтаксис для преобразования HashMap в JSONObject будет варьироваться в зависимости от того, какая библиотека JSON ваш проект имеет доступ. Если у него нет встроенного метода, вам придется вручную прокрутить HashMap, чтобы преобразовать его в правильный JSONObject.

Edit:

Поскольку группы объектов в настоящее время передаются в виде строки, вы можете использовать JSON.parse, чтобы преобразовать его в объект JSON.

function getSecretData(){ 
    var user = WL.Server.getActiveUser(); 
    var attributes = user.attributes; 
    var groups = JSON.parse(attributes.Groups); 

    return { 
     groups: groups 
    }; 
}