@JsonCreator和mixin通过模块不适用于第三方类

我试图反序列化java.net.HttpCookie,它没有默认的no-arg构造函数并且得到: org.codehaus.jackson.map.JsonMappingException:没有为类型[simple type,class java.net找到合适的构造函数。 HttpCookie]:无法在[源码:java.io.StringReader@5a395674;来自JSON对象(需要添加/启用类型信息?)实例化。 line:1,column:35

这是使用jackson-mapper-asl v 1.9.13

我找到了没有默认构造函数的Jackson第三方类,并试图通过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()); } 

我看到在我的日志中的反序列化exception之前记录了“Set mixin annotation”。 我没有看到“Mixin叫!” 永远(虽然我不确定mixin构造函数中的代码是否会被调用)。 有人可以用我的方式告诉我错误吗? 我是否需要注释java.net.HttpCookie中的所有字段?

http://docs.oracle.com/javase/7/docs/api/java/net/HttpCookie.html

我解决了这个问题,问题是我已经将mixin定义为使用它的类中的非静态内部类。 将它和模块移动到他们自己的包中自己的类定义修复了这个问题。 也可以将mixin内部类标记为“静态”来解决问题。

感谢Jackson Mixin不用于反序列化非默认构造函数对象,其中作者在发布自己的问题时对此必要性发表评论。