@JsonDeserializebuilder =没有注释

问题描述

我想反序列化在依赖项中定义的不可变类,因此无法修改。它只有一个私有构造函数,必须使用构建器构建。

借助Jackson,可以使用@JsonDeserialize(builder = SomeClass.SomeClassBuilder.class)来反序列化此类对象。不幸的是,我无法添加注释。

是否可以在不使用注释的情况下注册这样的构建器?如果是,那么您将如何进行呢?

解决方法

您可能想看看示例here(在Google BTW上首次点击):

定义自定义反序列化器:

public class SomeClassDeserializer extends StdDeserializer<SomeClass> { 
 
    public SomeClassDeserializer() { 
        this(null); 
    } 
 
    public SomeClassDeserializer(Class<?> vc) { 
        super(vc); 
    }
 
    @Override
    public SomeClass deserialize(JsonParser jp,DeserializationContext ctxt) 
      throws IOException,JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        // read values from node and use the SomeClassBuilder
        // to create an instance of SomeClass
    }
}

通过向ObjectMapper注册反序列化器,使Jackson知道反序列化器:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(SomeClass.class,new SomeClassDeserializer());
mapper.registerModule(module);
 
SomeClass readValue = mapper.readValue(json,SomeClass.class);

根据您使用的框架,可能会有其他更优雅的方式来注册反序列化器。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...