如何解决@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);
根据您使用的框架,可能会有其他更优雅的方式来注册反序列化器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。