java - @JsonCreator 和 mixin 通过模块不适用于第 3 方类

标签 java json jackson jackson-modules

我正在尝试反序列化 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/

相关文章:

maven - 在 Jersey 从 1.9 升级到 Jackson 2.0 不起作用

java - 将 json 字符串转换为日期对象

java - 如何通过 Selenium Webdriver 将文本发送到搜索字段?

jquery - jquery 中的 JSON 节点,未捕获 TypeError : Cannot read property '0' of undefined

java - 如何使抽屉导航出现在操作栏下方?

json - 如何更改 ppx_yojson_conv 表示变体的方式?

Javascript 函数返回未定义的 JSON 对象(但它不是未定义的!)

java - 在 Heroku : No content to map due to end-of-input 上运行时出现错误 fastxml...MismatchedInputException

Java:混合实现类

java - Spring MVC 不兼容 Jax RS : is it risky?