Play Framework (2.5.1)
を調べるのに数時間しかかからず、Reads
とWrites
を既に定義したときにFormat
を作成する理由が混乱しています。あなたのクラスにReads
とWrites
を定義することによって、クラスを変換するために必要なすべての機能を定義していないかJsValue
?Reads [T]とWrites [T]がある場合、Format [T]の目的は何ですか?
2
A
答えて
8
プレイフレームワークのドキュメントで述べたようにhere
フォーマット[T]は読み込みや特徴を書き込み、そのコンポーネントの代わりに、暗黙的な変換のために を用いることができるだけのミックスです。
フォーマットは、Reads [T]とWrites [T]の組み合わせです。したがって、T型に対して暗黙的なFormat [T]を1つ定義し、T型に対して暗黙のReads [T]とWrites [T]を定義するのではなく、Jsonを読み書きするために使用することができます。あなたのタイプTとFormat [T]のために定義された[T]は必要とされず、その逆も同様です。
Formatの利点の1つは、両方が対称(ReadsとWrites)の場合、2つの別々のReads [T]とWrites [T]を定義するのではなく、 。したがって、Formatを使用すると、JSON構造の定義の繰り返しが少なくなります。たとえば、次のようなことができます。
implicit val formater: Format[Data] = (
(__ \ "id").format[Int] and
(__ \ "name").format[String] and
(__ \ "value").format[String]
) (Data.apply, unlift(Data.unapply))
implicit val dataWriter: Writes[Data] = (
(__ \ "id").write[Int] and
(__ \ "name").write[String] and
(__ \ "file_type").write[String]
) (Data.apply)
implicit val dataWriter: Reads[Data] = (
(__ \ "id").read[Int] and
(__ \ "name").read[String] and
(__ \ "file_type").read[String]
) (unlift(Data.unapply))
関連する問題
- 1. Tが型パラメータでtが変数の場合、なぜ "t instanceof T"は許されないのですか?
- 2. I18n: 't(:test_key)'、 't(' test_key ')'、 't(' test_key ')'の違いは何ですか?
- 3. tがfloatの場合、f(t)を保存する方法は?
- 4. crefで使用する場合の「T:」とは何ですか
- 5. `newtype T = MkT(T - > T)`のユースケースはありますか?
- 6. Tがテンプレートの引数である場合、文T :: x(y)はあいまいですか?
- 7. T-SQL select文の[field] + 0の目的は何ですか?
- 8. 汎用型統合:複数パラメータ(T、T)対複数パラメータリスト(T)(T)?
- 9. HandlerExtensions.ConnectHandle ConnectHandler <T>()メソッドの目的は何ですか?
- 10. 静的とは何ですか<T>リスト<T> methodName(リスト<? super T>入力)
- 11. 次のCコードの出力はT Tです。なぜt tですか?
- 12. サンプルから\ t \ t \ tを削除\ t \ t
- 13. Tをリストに追加する方法<T>リスト<T>は「動的」、Tは「オブジェクト」となります。
- 14. Tがプリミティブ型の場合、std :: vector <T> :: clear()の複雑さは何ですか?
- 15. ストアドプロシージャT-SQLブールチェックの場合
- 16. 配列SとTのチェックが整数sとtであるため、kが与えられた場合にs + t = kとなる。
- 17. std :: unordered_set <T> :: insert(T &&):存在する場合、引数が移動する
- 18. Foo [T]とBar [T]のマップ
- 19. $ T、[$ T]、$ Uはminizincチュートリアルで
- 20. List <T>とList(Of T)との違いは何ですか?
- 21. Tが特性オブジェクトである場合、どのようにボックス<T>を作成しますか?
- 22. Nullable <T>とは何ですか?
- 23. リスト<T>を使用する場合、IEnumerable <T>とArrayList
- 24. /n/t/t myValue \ n \ t \ tなしでxmlファイルから読み取る方法
- 25. .NetのReadOnlyCollection <T>とReadOnlyCollectionBuilder <T>の違いは何ですか?
- 26. <U、T extends U>と<T、U super T>は同じですか?
- 27. ObservableCollection <T>を使用する場合、タイプTにINotifyPropertyChangedを実装する必要がありますか?
- 28. TとTを返す関数オブジェクトの特殊化T
- 29. キャスト?スーパーTからT
- 30. ジェネリックメソッド - "プライベート<T>ブール値(T []、T [])"
あなたの質問に答えた場合、回答を受け入れることができますか? –