我正在尝试反序列化 java.net.HttpCookie,它没有默认的无参数构造函数,并且正在获取: org.codehaus.jackson.map.JsonMappingException:没有找到适合类型[简单类型,类 java.net.HttpCookie] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?) 在[来源:java.io.StringReader@5a395674;行:1,列:35
这是 jackson-mapper-asl v 1.9.13
我找到了 Jackson 3rd Party Class With No Default Constructor并尝试通过 getDeserializationConfig 和 using 模块使用他们的解决方案。我在下面展示模块代码。
abstract class HttpCookieMixIn {
@JsonCreator
public HttpCookieMixIn(@JsonProperty("name") String name, @JsonProperty("value") String value) {
logger.info("Mixin called!");
}
}
public class MyModule extends SimpleModule {
public MyModule() {
super("ModuleName", new Version(0,0,1,null));
}
@Override
public void setupModule(SetupContext context) {
context.setMixInAnnotations(java.net.HttpCookie.class, HttpCookieMixIn.class);
logger.info("Set mixin annotation");
}
}
在服务器端点的构造函数中,我有以下内容:
public ServerEndpointConstructor() {
mapper = new ObjectMapper();
mapper.registerModule(new MyModule());
}
我在日志中看到反序列化异常之前记录了“Set mixin annotation”。我没有看到“Mixin 叫!”曾经(虽然我不确定 mixin 构造函数中的代码是否会被调用)。有人可以用我的方式告诉我错误吗?我需要注释 java.net.HttpCookie 中的所有字段吗?
http://docs.oracle.com/javase/7/docs/api/java/net/HttpCookie.html
最佳答案
我解决了这个问题,问题是我将 mixin 定义为使用它的类内部的非静态内部类。将它和模块移动到他们自己的包中他们自己的类定义修复了这个问题。也可以将 mixin 内部类标记为“静态”以解决此问题。
归功于 Jackson Mixin not working for deserializing non-default constructor object其中作者在发布自己的问题时对这样做的必要性进行了评论。
关于java - @JsonCreator 和 mixin 通过模块不适用于第 3 方类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650678/