【问题标题】:Jackson Mixin not working for deserializing non-default constructor object [duplicate]Jackson Mixin 无法反序列化非默认构造函数对象 [重复]
【发布时间】:2014-09-07 20:23:17
【问题描述】:

我正在编写一个 mixin 来将字符串反序列化为 javax.servlet.http.Cookie

Mixin.java

包装一个;
导入 org.codehaus.jackson.annotate.JsonProperty;

公共抽象类 MixIn {
      MixIn(@JsonProperty("name") 字符串名称,@JsonProperty("value") 字符串值) { }

}

HelloWorld.java

包 b;

导入a.MixIn;

ObjectMapper 映射器 = 新 ObjectMapper();
mapper.getDeserializationConfig().addMixInAnnotations(Cookie.class, MixIn.class);
Cookie aCookie = mapper.readValue("{"name":"abc","value":"xyz"}", Cookie.class);

似乎提供了“JsonMappingException: No suitable constructor found for type [simple type, class javax.servlet.http.Cookie]”错误。

请注意

- Mixin 被(必须)定义为一个单独的类(不是内部类,不是静态的)

- Mixin 及其使用的类(必须)在 2 个不同的包中。

我使用的是杰克逊 1.9.9

【问题讨论】:

标签: java jackson deserialization mixins


【解决方案1】:

为 Mixin 创建一个单独的类,

public abstract class MixinClass extends OriginalClass {

    //`datamember` is the datamember required to create instance of OriginalClass
    @JsonCreator
    MixinClass(@JsonProperty("item") datamember item) { super(item); }
}

在映射器类中添加这个,

objectMapper.addMixInAnnotations(OriginalClass.class, MixinClass.class);

这将解决问题。确保 MixinClass 是一个单独的 .java 文件,而不是一个内部类。

【讨论】:

  • 我正在做这件事,但它不起作用。
  • 为我工作谢谢。
  • mixin 可以在同一个文件中,前提是它是静态的
【解决方案2】:

您不需要在 mixin 构造函数中包含 @JsonCreator 吗?我自己也在为类似的问题苦苦挣扎,所以我在这里不是 100% 确定的。

我的问题:@JsonCreator and mixin via Module not working for 3rd Party Class

更新:我在上述问题中的示例有效,您对 mixin 的评论需要放在单独的包中而不是内部类中,谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 2016-07-07
    • 2013-11-05
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多