0

继上一个问题之后,我可以在自定义属性部分返回组列表,但是我想知道我需要做什么才能以标准 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"}
4

1 回答 1

1

为此,您需要先将组 HashMap 转换为 JSON 对象,然后再将其放入属性 HashMap。

就像是:

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

将 HashMap 转换为 JSONObject 的语法将根据您的项目可以访问的 JSON 库而有所不同。如果它没有内置方法,那么您将不得不手动循环遍历您的 HashMap 以便将其转换为正确的 JSONObject。

编辑:

由于组对象是作为字符串传入的,因此您可以使用 JSON.parse 将其转换为 JSON 对象。

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

    return {
        groups: groups
    };
}
于 2013-11-26T03:31:22.800 回答