Java 无法使用gson将json反序列化到case类

Java 无法使用gson将json反序列化到case类,java,json,scala,gson,deserialization,Java,Json,Scala,Gson,Deserialization,我在Scala编程语言中工作,希望将json反序列化到case类 我的案例课是这样的 case class Events ( Name: String, Field1: Option[Seq[String]], Field2: Option[Seq[String]], Field3: Option[Seq[String]] ) case class RootInterface ( Events: Seq[Events] ) "Events": [ {

我在Scala编程语言中工作,希望将json反序列化到case类

我的案例课是这样的

case class Events
(
  Name: String,
  Field1: Option[Seq[String]],
  Field2: Option[Seq[String]],
  Field3: Option[Seq[String]]
)

case class RootInterface
(
  Events: Seq[Events]
)
"Events": [
    {
      "Name": "event1",
      "Field1": ["f1"]
    },
    {
      "Name": "event2",
      "Field1": ["f1","f2"]
    }
  ]
json看起来像这样

case class Events
(
  Name: String,
  Field1: Option[Seq[String]],
  Field2: Option[Seq[String]],
  Field3: Option[Seq[String]]
)

case class RootInterface
(
  Events: Seq[Events]
)
"Events": [
    {
      "Name": "event1",
      "Field1": ["f1"]
    },
    {
      "Name": "event2",
      "Field1": ["f1","f2"]
    }
  ]
我要做的代码是

val gson = new Gson

gson.fromJson(json, classOf[RootInterface])
当我尝试这样做时,我得到以下错误

java.lang.RuntimeException:无法为scala.collection.Seq调用无参数构造函数。为此类型向Gson注册InstanceCreator可能会解决此问题


我该怎么解决这个问题呢?

您将无法向我们推荐希望Java Bean具有标准case类的Java库

  • 您没有artgs构造函数(必须创建默认构造函数)
  • 您只有setter(您没有使用
    var
    s)
  • 而且访问器不使用Bean语法(您必须使用
    @BeanProperty
因此,您必须使用以下内容:

case class Events(
  @BeanProperty var name: String,
  @BeanProperty var field1: Option[Seq[String]],
  @BeanProperty var field2: Option[Seq[String]],
  @BeanProperty var field3: Option[Seq[String]]
) {

  def this() = this("", None, None, None)
}

但这意味着库使用运行时反射,这会在总线下抛出类型安全性。就个人而言,如果您有选择的话,我认为没有理由使用Java JSON库,因为我在Scala库中有编译时反射。

为什么使用Java库而不是Scala库?很抱歉,我没有得到它。我在哪里使用java库?Gson是一个java库,它是为java程序设计的,它不知道如何处理Scala案例类。谢谢大家,我最后使用了一个Scala库