Jackson Mixin 不适用于反序列化非默认构造函数对象

Dar*_*han 2 java mixins jackson deserialization

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

Mixin.java

套餐一;
导入 org.codehaus.jackson.annotate.JsonProperty;

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

}

HelloWorld.java

包 b;

导入一个.MixIn;

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

它似乎提供了“JsonMappingException:找不到适合类型 [简单类型,类 javax.servlet.http.Cookie] 的构造函数”错误。

请注意

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

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

我正在使用杰克逊 1.9.9

Nik*_*tre 6

为 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); }
}
Run Code Online (Sandbox Code Playgroud)

在映射器类中添加这个,

objectMapper.addMixInAnnotations(OriginalClass.class, MixinClass.class);
Run Code Online (Sandbox Code Playgroud)

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

  • mixin 可以在同一个文件中,前提是它是静态的 (2认同)