gpt4 book ai didi

java - Jackson ObjectMapper - 更改 ObjectReader 上的配置是否会影响多个线程对 ObjectMapper 的使用

转载 作者:行者123 更新时间:2023-11-30 03:33:00 26 4
gpt4 key购买 nike

我们有一个基于 Spring 的应用程序,并且我们为 Jackson ObjectMapper 类定义了一个单例 bean。

@Bean(name = "jacksonObjectMapper")
public ObjectMapper createObjectMapper() {
return new ObjectMapper();
}

我们有一个用例来编写通用 JSON 序列化器/反序列化器,我们按以下方式编写:

public <T, U> T deserialize(final String inputJsonString, final Class<T> targetType, final Class<U> targetParameterType) throws JsonProcessingException, IOException {
return objectMapper
.reader(objectMapper.getTypeFactory().constructParametricType(targetType, targetParameterType))
.without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.readValue(inputJsonString);
}

这里我使用 ObjectReader 而不是 ObjectMapper 本身,并更改 ObjectReader 上的一些配置(例如 .without(... ))。我的问题是,此类配置更改是否会影响可能使用相同 ObjectMapper 实例执行其他操作(可能只是反序列化或序列化)的其他线程?

有人可以帮助我了解详细信息并指导我吗?

如果我没有清楚地解释问题,我深表歉意;请告诉我,我可以提供更多详细信息。

最佳答案

简短回答:不,ObjectReader 配置不会更改底层 ObjectMapper 配置。

说明:如果直接使用ObjectMapper并更改映射器的配置,并且映射器在多个线程之间共享,则可能会导致问题。但是,如果您不更改底层配置,那么您应该是安全的(更多阅读 here )。

在您的情况下,您正在调用实际创建 ObjectReadermapper.reader(...) 方法。 ObjectReaderObjectWriter 是不可变的,因此它们永远不会改变底层状态。此外,即使您更改底层ObjectMapper的配置,阅读器也不会受到影响。

请注意,每次调用 mapper.reader(...) 方法时,您都会创建一个新的 ObjectReader,因此如果您更改 ObjectMapper在调用 reader 方法之间进行 code> 配置,您可能会遇到问题。

因此,总结一下:如果您创建一个 ObjectReader 并在线程中使用相同的读取器,那么您就是安全的。

关于java - Jackson ObjectMapper - 更改 ObjectReader 上的配置是否会影响多个线程对 ObjectMapper 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28579344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com