首页 > 解决方案 > 在杰克逊中使用没有自定义 JsonDeserializer 的原始值构造函数反序列化 json

问题描述

我有一个类,我想通过调用构造函数来反序列化,该构造函数使用一种接受完整 json 对象作为字符串的方法:

public class MyDataObject {

    @IwantObjectMapperToCallThisWhenDeserializing
    public MyDataObject(String json) {
      // custom logic
    }
}

是否可以仅使用简单的注释来实现,而不影响我自己的JsonDeserializer

标签: javajsonjacksondeserialization

解决方案


我没有找到直接的方法,但这里有一个解决方法:

public class MyDataObject {

    @JsonCreator(mode = Mode.DELEGATING)
    // passed object is a Map, but as long as the type is serializable below, it can by any type
    public MyDataObject(Object map) {
        String json;
        try {
            json = new ObjectMapper().writeValueAsString(map);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("Error deserializing MyDataObject", e);
        }
        // custom logic
    }
}

推荐阅读