gpt4 book ai didi

java - 在 Java 中反序列化 Scala 反序列化的对象

转载 作者:行者123 更新时间:2023-11-30 10:32:19 24 4
gpt4 key购买 nike

======更新=====

对于带有Jackson注解的Scala类,可以在Java中序列化。

case class B @JsonCreator()(@JsonProperty("test")test: Boolean)

这行得通(解决了之前的问题)。但是,如果我使用 Option[Boolean]..

case class B @JsonCreator()(@JsonProperty("test")test: Option[Boolean])

要反序列化的 Java 代码

mapper.readValue("{\"test\": false}", B.class);

抛出异常

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of scala.Option, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information

===更新结束====

我有 Scala 类,它们使用 Play json 序列化并通过 rest 服务发送。我想使用 Scala 类在我的 Java 程序中反序列化这个 json。举例说明:

//A.scala
package my.scala
class A (test: Boolean)

//B.scala
package my.scala

case class B(test: Boolean)


//MyProg.java
package my.java
import com.fasterxml.jackson.databind.ObjectMapper;
public class MyProg {

ObjectMapper mapper = new ObjectMapper();
mapper.readValue("{\"test\": false}", A.class);

//this one too fails.
//mapper.readValue("""{"test": false}""", B.class);
}

我在 mapper.ReadValue 上得到以下异常

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class my.java.A]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: {
"test": false
}; line: 2, column: 3]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)

我的主要目标是反序列化案例类。但是我读到如果不添加 jackson 注释@JSONCreator 就无法反序列化案例类,我厌倦了添加它,但这也不起作用。

然后我尝试使用常规的 Scala 类,但这也不起作用。我该如何在 Java 中使用反序列化的 Scala 类?

最佳答案

我通过将 ScalaModule 注册到我的对象映射器解决了这个问题

//MyProg.java
package my.java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.scala.DefaultScalaModule;

public class MyProg {

ObjectMapper mapper = new ObjectMapper().registerModule(new DefaultScalaModule());

mapper.readValue("{\"test\": false}", A.class);

mapper.readValue("""{"test": false}""", B.class);
}

需要在 scala 对象上添加@JacksonCreatoer 和@JacksonProperty 注释。

关于java - 在 Java 中反序列化 Scala 反序列化的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42739919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com