当前位置: 首页 > 知识库问答 >
问题:

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

栾峰
2023-03-14

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

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

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

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

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

共有1个答案

戴博
2023-03-14

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

为那些像我一样被困的人找到了解决问题的办法!:为了处理用于jackson反序列化的第三方java或scala对象,您可以使用mixin(但需要重新配置jackson映射器或用户模块),也可以简单地创建一个名为MyClassDeserializer的类,该类扩展JsonDeserializer并使用@JsonDeserialize(使用=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());
   }
}
 类似资料:
  • 我刚刚开始使用play框架jongo和MongoDB开发一个项目。该项目最初是在Play 2.1中使用POJO编写的,POJO带有一个字符串id字段,该字段用@id和@ObjectId注释。这将作为ObjectId保存到Mongo,反序列化时将id输出为:“id”:“53fcb9ede4b0b18314098d10”例如。 由于升级到Jongo 1.1和Play 2.3.3,反序列化时id属性始终

  • 我在试着读我的。json文件。Is是一个车辆存储类。 这是错误: com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造的实例(尽管至少存在一个Creator):无法构造的实例(尽管至少存在一个Creator):没有字符串参数构造函数/工厂方法来从[Source:(File); line: 1,列: 1]处的字符串值反序列化

  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • 问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这

  • 可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)

  • 我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio