【问题标题】:@JsonCreator and mixin via Module not working for 3rd Party Class@JsonCreator 和通过模块的 mixin 不适用于第 3 方类
【发布时间】:2014-10-28 07:54:26
【问题描述】:

我正在尝试反序列化没有默认无参数构造函数的 java.net.HttpCookie 并且得到: org.codehaus.jackson.map.JsonMappingException:没有找到适合类型 [simple type, class 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());
}

我看到在我的日志中的反序列化异常之前记录了“设置混合注释”。我没看到“混心叫!”曾经(尽管我不确定是否会调用 mixin 构造函数中的代码)。有人可以告诉我我的方式中的错误吗? java.net.HttpCookie里面的所有字段都需要注释吗?

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

【问题讨论】:

    标签: java json jackson jackson-modules


    【解决方案1】:

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

    感谢Jackson Mixin not working for deserializing non-default constructor object,其中作者在发布他自己的问题时对这样做的必要性发表了评论。

    【讨论】:

    • 对我来说,即使它是一个内部类,也让它静态工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多