我正在编写一个需要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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用ObjectMapper#copy():
copyRun Code Online (Sandbox Code Playgroud)public ObjectMapper copy()用于创建
ObjectMapper与此实例具有相同初始配置的新实例的方法。请注意,这还需要制作底层JsonFactory实例的副本。当需要多个不同配置的映射器时,通常使用方法。虽然配置是共享的,但缓存的序列化器和反序列化器是不共享的,这意味着新实例在使用前可能会重新配置;这意味着它的行为方式与从头构建实例的方式相同。
自:2.1
例子:
public MyLibraryClass {
private ObjectMapper internalMapper;
public MyLibraryClass(ObjectMapper mapper) {
if (mapper == null) {
internalMapper = new ObjectMapper();
} else {
internalMapper = mapper.copy();
}
}
}
Run Code Online (Sandbox Code Playgroud)
也可以从ObjectMapperjavadocs 类中看到这个观察:
(...) 方法
copy(),它创建具有特定配置的映射器的克隆,并允许在使用之前配置复制的实例。请注意,copy()操作与构建新ObjectMapper实例一样昂贵:如果可能,如果您打算将它们用于多个操作,您仍然应该池化和重用映射器。
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |