继我的previous question后,我可以在自定义属性部分返回一个组列表,但是我想知道我需要做什么才能以std JSON结构返回它们。
如果我发回一个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"}
答案 0 :(得分:1)
为了做到这一点,在将HashMap放入属性HashMap之前,您需要将组HashMap转换为JSON对象。
类似的东西:
...
groups.add(groupMap1);
groups.add(groupMap2);
customAttributes.put("Groups", JSONObject(groups));
将HashMap转换为JSONObject的语法将根据您的项目可以访问的JSON库而有所不同。如果它没有内置的方法,那么你必须手动遍历你的HashMap,以便将它转换为适当的JSONObject。
编辑:
由于groups对象是作为字符串传入的,因此可以使用JSON.parse将其转换为JSON对象。
function getSecretData(){
var user = WL.Server.getActiveUser();
var attributes = user.attributes;
var groups = JSON.parse(attributes.Groups);
return {
groups: groups
};
}