🔄 synced local 'docs/guide/' with remote 'docs/guide/'
diff --git a/docs/guide/java/json-support.md b/docs/guide/java/json-support.md index 6d3dbfe..de53319 100644 --- a/docs/guide/java/json-support.md +++ b/docs/guide/java/json-support.md
@@ -895,20 +895,18 @@ not a JSON abstract syntax tree (AST) codec. It never handles Map keys; `MapKeyCodec` owns JSON object member names. -Implement all five representations with the same JSON shape: +For an application codec with the same semantics in every representation, extend +`AbstractJsonValueCodec<T>` and implement the JSON shape once: ```java import java.math.BigDecimal; -import org.apache.fory.json.codec.JsonValueCodec; -import org.apache.fory.json.reader.Latin1JsonReader; -import org.apache.fory.json.reader.Utf16JsonReader; -import org.apache.fory.json.reader.Utf8JsonReader; -import org.apache.fory.json.writer.StringJsonWriter; -import org.apache.fory.json.writer.Utf8JsonWriter; +import org.apache.fory.json.codec.AbstractJsonValueCodec; +import org.apache.fory.json.reader.JsonReader; +import org.apache.fory.json.writer.JsonWriter; -public final class MoneyCodec implements JsonValueCodec<Money> { +public final class MoneyCodec extends AbstractJsonValueCodec<Money> { @Override - public void writeString(StringJsonWriter writer, Money value) { + public void write(JsonWriter writer, Money value) { if (value == null) { writer.writeNull(); } else { @@ -917,26 +915,7 @@ } @Override - public void writeUtf8(Utf8JsonWriter writer, Money value) { - if (value == null) { - writer.writeNull(); - } else { - writer.writeBigDecimal(value.amount); - } - } - - @Override - public Money readLatin1(Latin1JsonReader reader) { - return reader.tryReadNullToken() ? null : new Money(reader.readBigDecimal()); - } - - @Override - public Money readUtf16(Utf16JsonReader reader) { - return reader.tryReadNullToken() ? null : new Money(reader.readBigDecimal()); - } - - @Override - public Money readUtf8(Utf8JsonReader reader) { + public Money read(JsonReader reader) { return reader.tryReadNullToken() ? null : new Money(reader.readBigDecimal()); } } @@ -950,6 +929,10 @@ } ``` +`AbstractJsonValueCodec` adds one virtual method call per operation. For a +performance-sensitive codec, or when behavior depends on a concrete reader or writer, implement +`JsonValueCodec<T>` directly and provide all five representation-specific methods. + Register it once: ```java