该问题讨论了特定的库,但该问题适用于需要迭代的任何方法链。 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"])
然而,我得到一个错误说(事实确实如此):
不能与类 'com.nimbusds.jwt.JWTClaimsSet $生成器' 投对象 'com.nimbusds.jwt.JWTClaimsSet$Builder@12f9af83' 类 'com.nimbusds.jwt.JWTClaimsSet'
如何迭代地图并将每个项目设置为声明,值?
答案 0 :(得分:2)
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()
}