Range
特定の形式、つまり でシリアル化する必要がある があります"[lower,upper)"
。そのために、基本的なシリアライザーを作成しました。
public class RangeSerializer extends StdSerializer<Range<?>> {
@Override
public void serialize(final Range<?> value, final JsonGenerator gen, final SerializerProvider provider) throws IOException {
if (value != null) {
gen.writeRaw('"');
gen.writeRaw('[');
provider.defaultSerializeValue(value.lowerEndpoint(), gen);
gen.writeRaw(',');
provider.defaultSerializeValue(value.upperEndpoint(), gen);
gen.writeRaw(')');
gen.writeRaw('"');
}
}
(実際にはRange
、シリアライザーは、閉じた/開いた範囲、両端に無制限の範囲がある可能性などのさまざまな可能性を処理することに注意してください。単純)。
私の問題は、各クラスのデフォルトのシリアライザーにフォールバックすると、間違った場所に引用符が表示されることです。たとえばRange<String>
、エントリを持つがあった場合"[foo,bar)"
、それをシリアル化すると が得られ"["foo","bar")"
ます。下限エンドポイント値と上限エンドポイント値を引用符なしで結果が必要です。
追加の引用符はgen.writeString()
、基礎となるシリアライザーが既に文字列になっていることを認識していないためであることを理解しています。ジェネレーターにこれを知らせる方法、または私がやろうとしていることを達成する別の方法はありますか?
Range<?>
本当に一般的なので、値のシリアル化をハードコーディングできないことに注意してください。Range<Integer>
、Range<String>
、およびその他すべてで機能する必要がRange<DateTime>
あります。