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
}
}
]
}
Reference
이 문제에 관하여(Kotlin Springboot -- Part 7 Rest でdmeinのデータクラスから JSON のためのデータクラスに変換して JSON に変換する), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/kotlin-springboot-part-7-rest-dedomeinnodetakurasukara-json-notamenodetakurasunibian-huan-site-json-nibian-huan-suru-2b7k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)