私は現在、カスタムシリアライザーとデシリアライザーを使用してJsonにPOJOをシリアライズ/デシリアライズするためにjackson fast xmlを使用するプロジェクトを持っています。私が理解していることから、 ObjectMapper は、作成および構成されるとスレッドセーフになります。ただし、JMeter でテストを実行しているときに、次のことが時折発生する可能性があることに気付きました -
- スレッド 1 は CustomerSerializer に入り、シリアル化を開始します
- スレッド 2 は CustomSerializer に入り、スレッド 1 を中断し、最初から最後までシリアル化を開始します
- スレッド 1 が再開し、最後にシリアライズされたものが欠落している
2 番目のスレッドが入ったときに 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());