4

問題の解決策が見つかりました私のように立ち往生する人の ために!: ジャクソンのデシリアライゼーション用にサードパーティの Java または scala オブジェクトを処理するには、Mixins を使用できます (ただし、jackson マッパーまたはユーザーモジュールを再構成する必要があります) またはJsonDeserializer を拡張し、 @JsonDeserialize(using = MyClassDeserializer.class) アノテーションを使用する MyClassDeserializer というクラスを簡単に作成できます。

例:

それは本当にシンプルで、魅力のように機能します! :)

public class User implements Identity{
       @JsonProperty("_id")
        private String id;
        @JsonDeserialize(using = OptionDeserializer.class)
        public Option<String> email;
    }



 public class OptionDeserializer extends JsonDeserializer<Option> {
        @Override
        public Option deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
            //code can be improved
ObjectCodec oc = jsonParser.getCodec();
            JsonNode node = oc.readTree(jsonParser);
            return  Option.apply(node.get("email").getText());
        }
    }

こんにちは、Jongo を使用して jackson でこれをデシリアライズしようとして、うまくいきません。

public class User implements Identity{
   @JsonProperty("_id")
    private String id;
    public Option<String> email;
}

オプションは抽象型です。私はこれに本当に慣れていません。実際にジャクソンに翻訳方法を伝える方法はありますか?

この User オブジェクトは mongo に正しく保存されていますが、読み取ることができません:/ 私はあなたたちが私の最後の手段であることを理解しようと多くの時間を費やしました! ありがとう(探し続ける)

原因: com.fasterxml.jackson.databind.JsonMappingException: scala.Option のインスタンスを構築できません。問題: 抽象型は、具象型にマップするか、カスタム デシリアライザーを使用するか、追加の型情報でインスタンス化する必要があります [ソース: de.undercouch.bson4jackson.io.LittleEndianInputStream@6f255853; pos: 237] (参照チェーン経由: models.User["email"])

4

1 に答える 1

1

popo joeの回答を回答として投稿:

問題の解決策が見つかりました私のように立ち往生する人のために!: ジャクソンのデシリアライゼーション用にサードパーティの Java または scala オブジェクトを処理するには、Mixins を使用できます (ただし、jackson マッパーまたはユーザーモジュールを再構成する必要があります) またはJsonDeserializer を拡張し、 @JsonDeserialize(using = MyClassDeserializer.class) アノテーションを使用する MyClassDeserializer というクラスを簡単に作成できます。

例 :

それは本当にシンプルで、魅力のように機能します! :)

public class User implements Identity{
     @JsonProperty("_id")
     private String id;
     @JsonDeserialize(using = OptionDeserializer.class)
     public Option<String> email;
 }

public class OptionDeserializer extends JsonDeserializer<Option> {
    @Override
    public Option deserialize(JsonParser jsonParser,
    DeserializationContext deserializationContext) throws IOException, 
    JsonProcessingException {`

        //code can be improved`

        ObjectCodec oc = jsonParser.getCodec();
        JsonNode node = oc.readTree(jsonParser);
        return  Option.apply(node.get("email").getText());
   }
}
于 2016-02-19T20:26:55.300 に答える