Jongo / Jackson 在 Java 中反序列化 scala.option



找到了解决问题的方法 对于那些像我一样会被困住的人!为了处理第三方Java或scala对象进行杰克逊反序列化,你可以使用Mixins(但你需要重新配置杰克逊映射器或用户模块)或您可以简单地创建一个名为MyClassDeserializer的类,该类扩展了JsonDeserializer并使用 @JsonDeserialize(using = MyClassDeserializer.class) 注释。

示例 :

它真的很简单,就像一个魅力! :)

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 与杰克逊反序列化此内容时遇到了一些不好的时间

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

选项是一种抽象类型,我对此真的很陌生,有没有办法真正告诉杰克逊如何翻译它?

此用户对象已正确保存到 mongo,但无法读取:/我花了很多时间试图理解你们是我最后的手段!谢谢(继续寻找)

由: com.fasterxml.jackson.databind.JsonMappingException: Can 不构造 Scala 的实例。选项,问题:抽象类型 需要映射到具体类型,具有自定义反序列化器,或者 使用其他类型信息实例化 在 [来源: de.undercouch.bson4jackson.io.LittleEndianInputStream@6f255853; pos: 237](通过参考链:模型。用户["电子邮件"])

将Popo Joe的答案作为答案发布:

找到解决问题的方法 对于那些像我一样被困的人!:为了处理第三方Java或scala对象进行杰克逊反序列化,你可以使用Mixins(但你需要重新配置杰克逊映射器或用户模块),或者你可以简单地创建一个名为MyClassDeserializer的类来扩展JsonDeserializer并使用@JsonDeserialize(using = MyClassDeserializer.class)注释。

例:

它真的很简单,就像一个魅力! :)

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());
   }
}

相关内容

  • 没有找到相关文章

最新更新