@JsonCreator和mixin via Module不适用于第三方课程

时间:2014-09-03 17:52:50

标签: java json jackson jackson-modules

我正在尝试反序列化java.net.HttpCookie,它没有默认的no-arg构造函数并且正在获取: org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class java.net.HttpCookie]的合适构造函数:无法从JSON对象实例化(需要添加/启用类型信息?)  在[来源:java.io.StringReader@5a395674; line:1,column: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

1 个答案:

答案 0 :(得分:4)

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

归功于Jackson Mixin not working for deserializing non-default constructor object,其中作者在发布自己的问题时对此必要性发表评论。