首页 > 解决方案 > JWTSigner 符号不允许 Map[String, AnyRef]

问题描述

当我尝试在 scala 中使用 JWTSigner 实现“签名”方法来生成 JWT 令牌时,我遇到了一个问题。我正在使用 com.oauth0.java-jwt-2.1.0。

"com.auth0" % "java-jwt" % "2.1.0"

代码:

class JWTUtil{
    def sign: String = {
        val signer = new JWTSigner("secret")
        val map = Map("iss" -> Some, "aud" -> Some)
        signer.sign(map) //"Cannot resolve the overloaded method sign"
    }
}

我在调用“sign”时遇到错误。它说“无法解析重载的方法符号”。它接受 Map<String, Object>。不确定它是否也适用于scala。我对 Scala 很陌生。谢谢!

标签: scalajwt

解决方案


您收到此错误是因为从 java util 包中期望 Mapsign的类方法,JWTSigner在这里您将 scala Map 集合传递给 sign 方法。此外,您需要将 Map 显式转换为Map[String, Object].

以下代码段可能有助于解决您的问题:

import java.util
import scala.jdk.CollectionConverters.MapHasAsJava

object JwtStackOverFlow extends App {

  def sign: String = {
    val signer = new JWTSigner("secret")
    val d: util.Map[String, Object] = Map("one" -> 1, "two" -> "234").asInstanceOf[Map[String, Object]].asJava
    signer.sign(d)
  }

  println(sign)

}

推荐阅读