JsonAccess アノテーション
Apex クラスレベルで定義される @JsonAccess アノテーションは、クラスのインスタンスが逐次化または並列化できるかどうかを制御します。アノテーションで JSON の逐次化および並列化が制限されている場合、JSONException 実行時例外が発生します。
@JsonAccess アノテーションの serializable および deserializable パラメータにより、Apex で逐次化および並列化が許可されるコンテキストが適用されます。一方または両方のパラメータを指定できますが、パラメータなしでアノテーションを指定することはできません。逐次化および並列化を許可するかどうか示すパラメータの有効な値は、次のとおりです。
- never: 許可しない
- sameNamespace: 同じ名前空間の Apex コードの場合にのみ許可する
- samePackage: 同じパッケージの Apex コードの場合にのみ許可する (第二世代パッケージ��のみ影響)
- always: どの Apex コードでも常に許可する
JsonAccess の考慮事項
- JsonAccess のアノテーションが付いた Apex クラスが拡張された場合、拡張されたクラスではこのプロパティが継承されません。
- toString メソッドがシリアライズできないオブジェクトに適用された場合、非公開データが公開可能になります。保護が必要なデータを含むオブジェクトでは、toString メソッドをオーバーライドする必要があります。たとえば、地図にキーとして保存されているオブジェクトを逐次化すると、toString メソッドが呼び出されます。生成された地図には、キー (文字列) と値のエントリが含まれているため、オブジェクトのすべての項目が公開されます。
次のコード例は、@JsonAccess アノテーションでマークされている Apex クラスを示します。
1// SomeSerializableClass is serializable in the same package and deserializable in the wider namespace
2
3@JsonAccess(serializable='samePackage' deserializable=’sameNamespace’)
4public class SomeSerializableClass { }
5
6
7// AlwaysDeserializable class is always deserializable and serializable only in the same namespace (default value from version 49.0 onwards)
8
9@JsonAccess(deserializable=’always’)
10public class AlwaysDeserializable { }バージョン管理動作の変更
バージョン 48.0 以前の場合、既存の動作を保持するために並列化のデフォルトのアクセス権は always、逐次化のデフォルトのアクセス権は sameNamespace になっています。バージョン 49.0 以降の場合、並列化と逐次化のデフォルトのアクセス権はどちらも sameNamespace になります。