我正在写一个需要一个库com.fasterxml.jackson.databind.ObjectMapper
实例。库的用户应该能够提供 ObjectMapper 或 ObjectMapper 实例本身的配置。但我还添加/修改了序列化器的一些设置,而不影响用户的 ObjectMapper 实例。
有什么方法可以创建 ObjectMapper 实例的副本/克隆吗?
看起来像ObjectMapper clonedInstance = new ObjectMapper(originalMapper.getFactory())
可以工作。但我不确定是否有什么我错过的。 ObjectMapper 的行为是否与原始对象完全相同?
目前这是我的代码:
public MyLibraryClass {
private ObjectMapper internalMapper;
public MyLibraryClass(ObjectMapper mapper) {
if (mapper == null) {
internalMapper = new ObjectMapper();
} else {
internalMapper = new ObjectMapper(mapper.getFactory());
}
}
}
您可以使用ObjectMapper#copy() https://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/ObjectMapper.html#copy():
copy
public ObjectMapper copy()
创建新的方法ObjectMapper
具有相同首字母的实例
配置为本实例。请注意,这还需要制作一个
底层的副本JsonFactory
实例。
该方法通常在多个不同配置的映射器时使用
需要。尽管配置是共享的,但缓存的序列化器和
反序列化器不共享,这意味着新实例可能是
使用前重新配置;这意味着它的行为方式与
一个实例是从头开始构建的。
自从:
2.1
Example:
public MyLibraryClass {
private ObjectMapper internalMapper;
public MyLibraryClass(ObjectMapper mapper) {
if (mapper == null) {
internalMapper = new ObjectMapper();
} else {
internalMapper = mapper.copy();
}
}
}
另请参阅来自ObjectMapperjavadoc 类 https://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/ObjectMapper.html:
(...) 方法copy()
它创建具有特定的映射器的克隆
配置,并允许之前配置复制的实例
它被使用了。注意copy()
操作成本与
建设一个新的ObjectMapper
例如:如果可能的话,你应该
如果您打算将映射器用于多个用途,仍然可以池化并重用它们
运营。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)