【发布时间】:2017-08-02 01:39:55
【问题描述】:
======更新=====
对于带有 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: 不能 构造scala.Option的实例,问题:抽象类型要么 需要映射到具体类型,具有自定义反序列化器,或者是 用额外的类型信息实例化
=== 更新结束 ====
我有 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)
我的主要目标是反序列化案例类。但是我读到如果不添加杰克逊注释@JSONCreator就无法反序列化案例类,我厌倦了添加它,但这也不起作用。
然后我尝试使用常规的 scala 类,但这也不起作用。如何在 java 中使用我的反序列化 scala 类?
【问题讨论】:
-
“然后我尝试使用常规 java 类”——这是什么意思?你可能错过了无参数构造函数
-
这里回答的问题:*.com/questions/28270621/…
-
谢谢威利斯,我试过了,虽然在使用它时我得到了错误 scala.Option。 “com.fasterxml.jackson.databind.JsonMappingException:无法构造scala.Option的实例,问题:抽象类型要么需要映射到具体类型,要么具有自定义反序列化器,要么使用附加类型信息进行实例化”
-
@cricket_007 查看更新。威利斯,您提供的链接对我不起作用。
标签: java scala jackson json-deserialization