jongo/jackson在java中反序列化scala.option

jongo/jackson在java中反序列化scala.option,java,serialization,jackson,option,jongo,Java,Serialization,Jackson,Option,Jongo,为像我一样被困的人找到了解决问题的方法!: 为了处理用于jackson反序列化的第三方java或scala对象,您可以使用mixin(但需要重新配置jackson映射器或用户模块) 或 您只需创建一个名为MyClassDeserializer的类来扩展JsonDeserializer 并使用@JsonDeserialize(使用=MyClassDeserializer.class)注释 例如: 这真的很简单,而且很有魅力!:) 公共类用户实现身份{ @JsonProperty(“\u id”)

为像我一样被困的人找到了解决问题的方法!: 为了处理用于jackson反序列化的第三方java或scala对象,您可以使用mixin(但需要重新配置jackson映射器或用户模块) 或 您只需创建一个名为MyClassDeserializer的类来扩展JsonDeserializer 并使用@JsonDeserialize(使用=MyClassDeserializer.class)注释

例如:

这真的很简单,而且很有魅力!:)

公共类用户实现身份{
@JsonProperty(“\u id”)
私有字符串id;
@JsonDeserialize(使用=OptionDeserializer.class)
公开选择电子邮件;
}
公共类OptionDeserializer扩展了JsonDeserializer{
@凌驾
公共选项反序列化(JsonParser、JsonParser、反序列化上下文、反序列化上下文)引发IOException、JsonProcessingException{
//代码可以改进
ObjectCodec oc=jsonParser.getCodec();
JsonNode=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;
}
公共类用户实现身份{
@JsonProperty(“\u id”)
私有字符串id;
公开选择电子邮件;
}
Option是一种抽象类型,我对它很陌生,有没有办法告诉jackson如何翻译它

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

原因:com.fasterxml.jackson.databind.JsonMappingException:Can 不构造scala.Option的实例,问题:抽象类型 需要映射到具体类型、具有自定义反序列化程序或 使用其他类型信息实例化 在[来源:de.underuch.bson4jackson.io。LittleEndianInputStream@6f255853;位置: 237](通过参考链:models.User[“email”])


将popo joe的答案作为答案发布:

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

例如:

这真的很简单,而且很有魅力!:)

公共类用户实现身份{
@JsonProperty(“\u id”)
私有字符串id;
@JsonDeserialize(使用=OptionDeserializer.class)
公开选择电子邮件;
}
公共类OptionDeserializer扩展了JsonDeserializer{
@凌驾
公共选项反序列化(JsonParser JsonParser,
反序列化上下文(反序列化上下文)引发IOException,
JsonProcessingException{`
//代码可以改进`
ObjectCodec oc=jsonParser.getCodec();
JsonNode=oc.readTree(jsonParser);
return Option.apply(node.get(“email”).getText());
}
}

什么是类
选项
以及它是否包含默认构造函数?hello Michal Option类是scala类:/我在java项目中使用的第三方数据库使用scala,我需要序列化一个包含选项字段的对象。thx michal我已经找到了问题的解决方案,并将其发布在我为futur撰写的第一篇文章中users@user2207996你应该把你的答案贴在下面,并接受它,这样问题就不会在列表中显示为未回答的问题。没问题。您可以将您的解决方案作为答案发布。这将是最清晰的方式。
public class User implements Identity{
   @JsonProperty("_id")
    private String id;
    public Option<String> email;
}
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());
   }
}