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

标签 java jackson deserialization mixins

<分区>

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

Mixin.java

package a;
import org.codehaus.jackson.annotate.JsonProperty;

public abstract class MixIn {
      MixIn(@JsonProperty("name") String name, @JsonProperty("value") String value) { }

}

HelloWorld.java

package b;

import a.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 个不同的包中。

我正在使用 jackson 1.9.9

最佳答案

为 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 文件而不是内部类。

关于java - Jackson Mixin 不适用于反序列化非默认构造函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24795488/

相关文章:

java - 在 java 中绘制图形 - NetBeans IDE

Java URLDecoder 返回?

java - Jackson Mapper 具有特殊字符 é 问题

json - 使用 Jackson 从字符串反序列化 ArrayList

c# - 如果标签之间存在字符串,则通过在 C# 中从 XML 反序列化获取 null

java - 在 pom.xml 中添加 javaee-api 依赖项时 SpringBoot 测试失败

java - 使用工厂方法模式

java - 我可以忽略 ObjectMapper 中的 MismatchedInputException 吗?

arrays - 如何使用Serde对大于32个元素的数组进行(反)序列化,例如[u8; 128]?

java - 将 QByteArray 反序列化为 Java 数据类型