18.3.1 マッピング要件
(1) POJO
- POJOクラスは,publicスコープまたはパッケージスコープで定義してください。final修飾子を指定しても問題ありません。
- POJOクラスはデフォルトコンストラクタを持つ必要があります。デフォルトコンストラクタは明示的に宣言してもしなくてもどちらでも問題ありません。また,publicスコープ,privateスコープ,protectedスコープ,またはパッケージスコープのどれでも問題ありません。POJOクラスがデフォルトコンストラクタを持たない場合,JsonMappingExceptionがスローされます。Java言語仕様にあるとおり,パラメタを持つコンストラクタを宣言した場合は明示的にデフォルトコンストラクタを宣言する必要があることに注意してください。例外ハンドリングについては「18.3.3 例外ハンドリング」を参照してください。
- POJOクラスはインナークラスとして宣言された型のフィールドまたはBeanプロパティを持つことができます。この場合,インナークラスはインタフェースまたは非staticなクラスにしないでください。インタフェースまたは非staticなクラスであるインナークラスとして宣言された型のフィールドまたはBeanプロパティがある場合,JsonMappingExceptionがスローされます。例外ハンドリングについては「18.3.3 例外ハンドリング」を参照してください。
- POJOにマッピングできない値がJSONフォーマットにある場合,JsonMappingExceptionがスローされます。例外ハンドリングについては「18.3.3 例外ハンドリング」を参照してください。
- フィールドおよびBeanプロパティの名称が同じ場合,Beanプロパティが優先されます。
- POJOがマッピングの対象となるフィールドもBeanプロパティも持たなくてもエラーにならないのは,JSONフォーマットが空の場合だけです。
(2) フィールド
- フィールドはpublicスコープで定義してください。publicスコープではない場合は,JsonMappingExceptionがスローされます。例外ハンドリングについては「18.3.3 例外ハンドリング」を参照してください。
- static修飾子,またはtransient修飾子およびfinal修飾子をフィールドに指定しないでください。指定されている場合はマッピングの対象になりません。
- JSONフォーマットに対応する値がないフィールドは初期化されません(例外はスローされません)。
(3) Beanプロパティ
- Beanプロパティのsetterメソッドにはpublicスコープを推奨します。なお,privateスコープ,protectedスコープ,パッケージスコープも使用できます。
- 大文字・小文字の違いだけがある複数のsetterメソッドを宣言しないでください。複数宣言されている場合,JsonMappingExceptionがスローされます。例外ハンドリングについては「18.3.3 例外ハンドリング」を参照してください。
- staticをBeanプロパティに指定しないでください。指定されている場合はマッピングの対象になりません。
- final修飾子を指定しても問題ありません。
- Beanプロパティは読み取り可能なプロパティである必要はありません。Beanプロパティの詳細についてはJavaBeans仕様を参照してください。
- JSONフォーマットに対応する値がないBeanプロパティのsetterメソッドは呼び出されません(例外はスローされません)。