在将Jackson JsonNode转换为Java集合时?

见下面的问题/答案:https://stackoverflow.com/a/39237947/15435022

ObjectMapper mapper = new ObjectMapper();  // singleton in the project
...
JsonNode arrayNode = mapper.createArrayNode().add("one").add("two");
ObjectReader reader = mapper.readerFor(new TypeReference<List<Product>>() {});
List<String> list = reader.readValue(arrayNode);

TypeReference的对象读取器应该是项目中的单例,还是应该在每次调用方法时重新声明它?

我已经在项目中将ObjectMapper声明为单例.

ObjectReader reader = mapper.readerFor(new TypeReference<List<Product>>() {});

推荐答案

根据ObjectReader的第documentation条,实例可以重复使用:

使用"Mutations 工厂"模式,因此实例是不可变的(因此完全线程安全,不需要外部同步);新实例是为不同的配置构造的.实例最初是由ObjectMapper构造的,并且可以重用、共享和缓存;这既是因为线程安全,也是因为实例相对较轻.

考虑到文档中所做的保证,如果您愿意,有no个理由不在项目中使用每个类型的单个实例.

附注:我不会完全使用单例,而是使用缓存,这样一段时间后就可以清除未使用的实例.

Java相关问答推荐

Jooq隐式地将bigint转换为数字,并且索引不起作用

Mongo DB Bson和Java:在子文档中添加和返回仅存在于父文档中的字段?

Springdoc Whitelabel Error Page with Spring V3

尽管类型擦除,instanceof与泛型在Java中如何工作?

Java List with all combinations of 8 booleans

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

基于调车场算法的科学计算器

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

为什么在maven中,getLast方法不适用于List?

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

如何将Java文档配置为在指定的项目根目录中生成?

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

try 使用类来包含JSON响应

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

除0错误/抱歉我的句子是PT

RestTemplate Bean提供OkHttp3ClientHttpRequestFactory不支持Spring Boot 3中的请求正文缓冲

如何使用Java ZoneID的区域设置?

Java递归泛型是否可以被视为继承和重写的语法糖

将基于实例编号的对象列表拆分为新的对象列表

如何使用命令行为Java应用程序生成烟雾测试用例