======更新:Javaでスカラー逆シリアル化されたオブジェクトを逆シリアル化する
Javaの注釈付きのScalaクラスは、Javaで直列化することができます。
case class B @JsonCreator()(@JsonProperty("test")test: Boolean)
これは機能します(以前の問題を処理します)。することができません 構文:私は
mapper.readValue("{\"test\": false}", B.class);
をデシリアライズするためのオプション[ブール] ..
case class B @JsonCreator()(@JsonProperty("test")test: Option[Boolean])
Javaコードを使用する場合は例外
com.fasterxml.jackson.databind.JsonMappingExceptionをスローしますスカラーのインスタンス。オプション、問題:抽象タイプ は、具体的な型にマップするか、カスタムデシリアライザを持つか、または をインスタンス化する必要があります。追加の型情報と
===更新終了====
私がプレイJSONを使用して直列化し、残りのサービスを介して送信されるScalaのクラスを、持っています。 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で私のdeserializedスカラクラスを使用して行くのですか?
「私は通常のJavaクラスを使用しようとしました」 - それはどういう意味ですか?あなたはおそらく無引数のコンストラクタを逃した –
ここで答えられた質問:http://stackoverflow.com/questions/28270621/using-jackson-to-de-serialize-a-scalacase-class –
Willis、私はそれを試みた私はエラーscala.Optionを取得しています。 "com.fasterxml.jackson.databind.JsonMappingException:scala.Optionのインスタンスを構築できません。問題:抽象型を具体的な型にマッピングするか、カスタムデシリアライザを使用するか、追加の型情報でインスタンス化する必要があります。" – konquestor