Jackson ObjectMapper和JsonGenerator - 它是线程安全的吗?

 fion依依315 发布于 2023-02-06 11:17

我目前有一个项目使用jackson rapid xml来使用自定义序列化器和反序列化器将POJO序列化/反序列化为Json.据我所知,ObjectMapper一旦创建和配置就是线程安全的.但是,我注意到在使用JMeter运行测试时偶尔会发生以下情况 -

线程1进入CustomerSerializer并开始序列化

线程2进入CustomSerializer,中断线程1,并开始从头到尾序列化

线程1恢复,最后被序列化的东西丢失了

似乎第二个线程进入时JsonGenerator实例正在重置 - 当然这不应该发生?我检查了几个站点和线程,看看是否有我需要设置的任何设置或功能,但从我的理解,ObjectMapper重用JsonGenerator实例,这可能是问题吗?

以下是我的自定义序列化程序的片段...

@Override
public final void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {

    jsonGenerator.writeStartObject();

    ... Code here ....

    jsonGenerator.writeEndObject();

    closeJsonGenerator(jsonGenerator);
}

并举例说明了它的使用方法

SimpleModule sm = new SimpleModule();
sm.addSerializer(new myCustomSerializer());
new ObjectMapper().registerModule(sm)
                  .writeValue(new myObject());

Sotirios Del.. 6

杰克逊为每个序列化请求ObjectMapper创建了一个新的JsonGenerator.从这个意义上说,它保证是线程安全的.我能看到的唯一可能导致您看到的行为的是您CustomSerializer是否有一些正在共享的实例字段并且正在进行某种内部同步.

1 个回答
  • 杰克逊为每个序列化请求ObjectMapper创建了一个新的JsonGenerator.从这个意义上说,它保证是线程安全的.我能看到的唯一可能导致您看到的行为的是您CustomSerializer是否有一些正在共享的实例字段并且正在进行某种内部同步.

    2023-02-06 11:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有