You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将JSON字符串转为Scala case class时遇NoSuchMethodError求助

解决json4s转换JSON到Scala case class时的NoSuchMethodError问题

这个错误我之前也碰到过,九成是Scala版本和json4s依赖版本不兼容导致的!你代码里的implicit val formats写法其实没问题,问题出在依赖配置上。

错误原因解析

java.lang.NoSuchMethodError: scala.Function0.$init$(Lscala/Function0;)V这种错误,本质是因为json4s依赖编译时用的Scala版本,和你当前项目使用的Scala版本不匹配。Scala不同大版本(比如2.12、2.13)之间的字节码有差异,导致运行时找不到对应的方法。

具体解决方案

  1. 确认项目的Scala版本
    打开IntelliJ的Project Structure(快捷键Ctrl+Alt+Shift+S),进入Modules → 选中你的模块 → 切换到Scala标签,就能看到当前项目使用的Scala版本;或者直接看构建文件(比如build.sbt里的scalaVersion字段)。

  2. 匹配对应的json4s依赖版本
    json4s的版本和Scala版本有严格对应关系,以下是常用的匹配组合:

    • 如果用Scala 2.13:选择4.0.x及以上版本的json4s
    • 如果用Scala 2.12:可以用3.6.x到4.0.x之间的版本
    • 如果用Scala 2.11:选择3.5.x或更早的版本

    举个build.sbt依赖配置的例子:

    // Scala 2.13 示例
    libraryDependencies ++= Seq(
      "org.json4s" %% "json4s-jackson" % "4.0.6",
      "org.json4s" %% "json4s-core" % "4.0.6"
    )
    
    // Scala 2.12 示例
    libraryDependencies ++= Seq(
      "org.json4s" %% "json4s-jackson" % "3.6.12",
      "org.json4s" %% "json4s-core" % "3.6.12"
    )
    

    注意:要保证json4s的所有模块(core、jackson等)版本完全一致,不要混合不同版本的依赖。

  3. 清理并重新构建项目
    依赖更新后,先清理旧的编译文件:

    • 在IntelliJ中点击Build → Clean Project,然后Build → Rebuild Project
    • 或者用sbt命令行执行:clean compile
  4. 简化代码写法(可选)
    你的formats写法可以简化,只要提前导入org.json4s.DefaultFormats,就可以直接写:

    import org.json4s.DefaultFormats
    
    def jsonStrToMap(jsonStr: String) : EventPayloadIn = {
      implicit val formats = DefaultFormats
      parse(jsonStr).extract[EventPayloadIn]
    }
    

    这和你原来的写法效果一致,只是更简洁。

额外注意事项

  • 如果是用Maven构建,要注意artifactId里的Scala版本后缀,比如json4s-jackson_2.13对应Scala 2.13,不要写错。
  • 检查项目中有没有其他依赖间接引入了不同版本的json4s,可以用sbt dependencyTree(或Maven的dependency:tree)命令查看依赖树,排除冲突的版本。

内容的提问来源于stack exchange,提问作者Sankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:22:23