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

时间:2013-11-10 00:14:29

标签: java serialization jackson option jongo

找到问题的解决方案对于那些像我一样被困的人!: 为了处理第三方java或scala对象的jackson反序列化,你可以使用Mixins(但你需要重新配置jackson映射器或用户模块) 要么 你可以简单地创建一个名为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;
}

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

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

  

引起:com.fasterxml.jackson.databind.JsonMappingException:可以   不构造scala的实例。选择,问题:抽象类型   需要映射到具体类型,具有自定义反序列化器,或者   用其他类型信息进行实例化        在[来源:de.undercouch.bson4jackson.io.LittleEndianInputStream@6f255853; POS:   [237](通过参考链:models.User [“email”])

1 个答案:

答案 0 :(得分:1)

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

找到问题的解决方案对于那些像我一样被卡住的人!:为了处理第三方java或scala对象的jackson反序列化,你可以使用Mixins(但你需要重新配置jackson mapper或用户模块)或者你可以简单地创建一个名为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());
   }
}