Kotlin Springboot -- Part 7 Rest でdmeinのデータクラスから JSON のためのデータクラスに変換して JSON に変換する

9642 단어 springbootkotlinca



前回は Driver で DB や API などから取ってこられる DB テーブルの世界のEntitiitiを返し、
Gateway でEntiti を業務の世界のOBJECTORを表すデータクラスである Domain に詰め直した.

今回は Usecase を介して渡された Domain OBJECTを API として JSON で出力するための新しいデータクラスに Rest で変換する.

これは DomainName.toJson と名付け、Domain の拡張だが、Rest に定義する.

Django で Serializer が行っていた役割と似ているが、こちらは型をつける必要が有る.

REST のどこに書くのか



@RestController
class PersonHandler {
  @GetMapping("/persons")
  fun getPersons(): String {
  // .....
}

이 HTTP richestの対応を書くクラスの外に JSON の ための データクラスを作る.

Json にするための ObjectJson の データクラスを作る



data class PersonsJson(val persons: List<PersonJson>)
data class PersonJson(
  val name: String,
  val age: Int,
)

JSON 레스폰스의 데이터 클래스.
JSON には형은 ないので、JSON にした瞬間に형은 消滅し
val で入っている 키 と中身が残る.

{
  "persons": [
    {
      "name": "text",
      "age": 12345
    }
  ]


よって, val people とその中の配列の
val name, val age, これらがこうやって返される.

Domain 에서 ObjectJson にするための Object.toJson 関数を作る



도메인 のデータクラス、Persons を拡張する.
こちらも REST に書く.
toJson といいつつ、これを実行したところで JSON にはならない.
JSON に変換する事前準備のための型という意味.

fun Persons.toJson() = PersonsJson(this.list.map { (it.toJson())})

fun Person.toJson(): PersonJson {
  val personJson = PersonJson( this.name.value, this.age.value,)
  return personJson
}


Person*s*.toJson 그리고는
ドメインの Persons(을)를 지도 해
中身の各 Person に Person.toJson を実行させる.

Persons.toJson では this で参照して
name と age の value を出して PersonJson の中にいれて return する.

Domain の データクラスの中に入っていたもの를
Json 用のデータクラスの中に詰め替えている.

Kotlin 오브제크트를 JSON に変換するための gson 라이브브라리를入れる



bulid.grade.kts を開き

dependencies {
    //...
    implementation ("com.google.code.gson:gson:2.9.1")
}


gson の依存を書いて Gradle をリロードする.
すると gson ライブラリがinstor される.

REST で gson を呼び出す



import com.google.gson.Gson
// ...
  val persons = personsUsecase.getAllPersons()
  val gson = Gson()
  val personsJson = persons.toJson()
  val json2 = gson.toJson(personsJson)


Gson はこのように使える.
UseCase 등의 인스턴스を作る時と同じように
一度クラスカラインスタンスを作り,
そのインスタンスカラメンバー関数を呼び出す.

Usecase から呼び出された 도메인 に入った people を toJson 型に詰め直して, その後 gson で変換する.

web で確認する



Springbooot で起動したにアクセスすると
このように레스폰스가綺麗にみえた.これで使える.

// 20220908225236
// http://localhost:8080/persons

{
  "persons": [
    {
      "name": "taro",
      "age": 3
    },
    {
      "name": "hana",
      "age": 5
    }
  ]
}



まとめ



DB 테이불의 도합의 엔티티
오브제크트指向の都合のドメイン
JSON의 都合のtoJson

これらの 3 つのデータクラスを使い分けるのが, クリーンアーキテクチ챠.

Kotlin 크리닝 아키텍쳐로 REST로 API를 사용하면 JSON을 사용할 수 있습니다.

そのためには Gateway でOBJECTO指向の都合で Domain に詰められているものを Usecase 에서 Rest に運んできた後に

JSON 用のデータクラスに詰め替えて、その上で gson を使って JSON に変換すればうまく行く.

도메인 のまま JSON に変換するとこうなりますからね.

{
  "list":[
    {
      "name":{
        "value":"taro"
      },
      "age":{
        "value":3
      }
    },
    {
      "name":{
        "value":"hana"
      },
      "age":{
        "value":5
      }
    }
  ]
}

좋은 웹페이지 즐겨찾기