调用对象参数 ArrayList 并将其转换为 CSV 格式的字符串

Calling an Object parameter ArrayList and converting it to a String in CSV format

我得到了一些可以正常工作的 WSO2 自定义声明代码。虽然我想添加或更改其中的一部分。当我使用 identifiers.getRolesCSV() 进行调用时,它将像字符串一样打印出来,但如果您尝试将其用作变量,它仍然会将其视为 ArrayList。或者换句话说,现在从 WSO2 传递的角色是一个如下所示的数组。

"roles": [
"Admin",
" Software Engineer",
" Current User",
],

我想将其更改为像这样的逗号分隔字符串。

"roles": "Admin, Software Engineer, Current User"

第二个是 ID 令牌中返回的内容。

下面是一些代码。

代码

    private Map<String, String> addClaims(String subscriberId, Map<String, String> map) {

    if (subscriberId == null) {
        return map;
    }

    Entity identifiers = null;

    identifiers = EntityHelper.getEntityFromUserName(subscriberId);
    if (identifiers == null) {
        return map;
    }

    map.put("roles", identifiers.getRolesCSV());

    return map;
}

public class Entity {
List roles = new ArrayList();


public Entity() {
}

public String getRolesCSV() {

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < roles.size(); i++) {
        sb.append(roles.get(i));

        if (i != roles.size() - 1)
        {
            sb.append(", ");
        }

    }

    return sb.toString();     
}

public class EntityHelper {

private final LdapHelp ldapHelper = new LdapHelp();

public EntityHelper() {

}

public Entity getEntityFromUserName(String netid) {

    Attributes attributes = null;
    Entity domainEntity = new Entity();

    try {
        attributes = ldapHelper.getAttributesForUsername(netid, Domain.*local*);

        if (attributes != null) {

            List roles = getAttributeList(attributes.get(LdapHelp.MEMBER_OF_ATTRIBUTE), "CN");
            domainEntity.setRoles(roles);

        } else {
            if (log.isDebugEnabled()) {
                log.debug("no attributes returned");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return domainEntity;
}

看起来代码运行正常。代码何时构建令牌,它会正确打印出来。当 wso2 构建声明时,它会以另一种方式打印出来。重点是它工作正常只是看起来它工作错误。