gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:13 40 4
gpt4 key购买 nike

为像我一样被困住的人找到问题的解决方案!为了处理第三方 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 对 jackson 进行反序列化时遇到了一些困难

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

Option 是一个抽象类型,我对此很陌生,有没有办法实际告诉 jackson 如何翻译它?

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

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of scala.Option, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information at [Source: de.undercouch.bson4jackson.io.LittleEndianInputStream@6f255853; pos: 237] (through reference chain: models.User["email"])

最佳答案

张贴 popo joe 的答案作为答案:

找到问题的解决方案对于像我一样被卡住的人!:为了处理第三方 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());
}
}

关于java - jongo/jackson 在 java 中反序列化 scala.option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19884770/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com