在Groovy中迭代映射以构建点符号链式方法

在Groovy中迭代映射以构建点符号链式方法,groovy,Groovy,这个问题涉及一个特定的库,但这个问题适用于任何需要迭代的方法链。Nimbus JWT+JOSE库有一个名为JWTClaimsSet的类,它允许您使用以下语法构建JWT: JWTClaimsSet jwtClaims = new JWTClaimsSet.Builder() .claim("claim1", "claim1") .claim("claim2", "claim2") .build() 我试图在这

这个问题涉及一个特定的库,但这个问题适用于任何需要迭代的方法链。Nimbus JWT+JOSE库有一个名为
JWTClaimsSet
的类,它允许您使用以下语法构建JWT:

        JWTClaimsSet jwtClaims = new JWTClaimsSet.Builder()
            .claim("claim1", "claim1")
            .claim("claim2", "claim2")
            .build()
我试图在这里完成的是以编程方式添加声明。到目前为止,我一直在尝试创建这样一个类:

 static JSONObject GenerateJWT(Map mClaims){
    JWTClaimsSet jwtClaims = new JWTClaimsSet.Builder()


    mClaims.each {
        k,v ->
            jwtClaims = jwtClaims.claims(k.toString(),v.toString())
    }

    jwtClaims = jwtClaims.build()

    return jwtClaims.toJSONObject()

}
MyClass.GenerateJWT(["claim1": "claim1", "claim2": "claim2"])
这样称呼它:

 static JSONObject GenerateJWT(Map mClaims){
    JWTClaimsSet jwtClaims = new JWTClaimsSet.Builder()


    mClaims.each {
        k,v ->
            jwtClaims = jwtClaims.claims(k.toString(),v.toString())
    }

    jwtClaims = jwtClaims.build()

    return jwtClaims.toJSONObject()

}
MyClass.GenerateJWT(["claim1": "claim1", "claim2": "claim2"])
然而,我得到一个错误,即(事实上是这样的):

无法强制转换对象“com.nimbusds.jwt.JWTClaimsSet”$Builder@12f9af83将“com.nimbusds.jwt.jwtclaimset$Builder”类中的“com.nimbusds.jwt.jwtclaimset”类更改为“com.nimbusds.jwt.jwtclaimset”


如何遍历映射并将每个项设置为claim、value?

JWTClaimsSet
JWTClaimsSet.Builder
是不同的类,因此您的静态键入在这里被丢弃。构建器上的所有方法都返回一个
builder
对象以允许链接,除了
build()
,它返回最终的
JWTClaimsSet
。我认为这应该奏效:

static JSONObject GenerateJWT(Map mClaims) {
    JWTClaimsSet.Builder jwtClaimsBuilder = new JWTClaimsSet.Builder()

    mClaims.each { k, v ->
        jwtClaimsBuilder = jwtClaimsBuilder.claim(k.toString(), v.toString())
    }

    JWTClaimsSet jwtClaims = jwtClaimsBuilder.build()

    return jwtClaims.toJSONObject()
}

这很有魅力,谢谢你花时间回答。