首页 文章

Jackson Mixin不用于反序列化非默认构造函数对象[重复]

提问于
浏览
2

这个问题在这里已有答案:

我正在编写一个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:没有为类型[simple type,class javax.servlet.http.Cookie]找到合适的构造函数”错误 .

请注意

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

  • Mixin和它所使用的类(必须是)在2个不同的包中 .

我正在使用 Jackson 1.9.9

2 回答

  • 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); }
    }
    

    在mapper类中添加这个,

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

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

  • 2

    你不需要在mixin构造函数中包含@JsonCreator吗?我自己仍在努力解决类似的问题,所以我不是百分之百肯定的 .

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

    更新:我在上面的问题中的例子是有效的,你对mixin的评论需要在一个单独的包而不是内部类中做了诀窍,谢谢!

相关问题