https://www.playframework.com/documentation/2.5.x/ScalaJsonInceptionから
通常、Jackson や Gson などの Java JSON フレームワークは、何も記述せずに背後でそれを行うため、 Reads[TheirClass] を記述するのはクールではないと考える一部の人々から、いくつかの苦情がありました。Play2.1 JSON シリアライザー/デシリアライザーは次のとおりであると主張しました。
- 完全にタイプセーフで、
- 完全にコンパイルされた、
- 実行時にイントロスペクション/リフレクションを使用して何も実行されませんでした。
ObjectMapperジャクソンでは、これらのどれでもありません。リフレクションに大きく依存しているため、難読化ツールを介してクラス ファイルをフィードすると、完全に壊れる可能性があります。そうしない場合でも、コンパイル時に、逆シリアル化しようとしているクラスが実際に逆シリアル化可能であるという保証はありません。
Scala の魅力の 1 つは、非常に強力なコンパイル時の保証を提供することです。暗黙の要素 (例: や のような型クラスReads)Writesは考慮されますが、ボイラープレート/オーバーヘッドが伴います。
Play 開発者はあなたの苦情を聞いていますが、それがなくなる可能性はほとんどありませReadsんWrites。代わりに、次のようなコードを見つけるマクロを提供することで、少し冗長にしようとしています。
implicit val personReads = Json.reads[Person]
Personコンストラクターに基づいて、次のように解釈します。
implicit val personReads = (
(__ \ 'name).read[String] and
(__ \ 'age).read[Int] and
(__ \ 'lovesChocolate).read[Boolean]
)(Person)