Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환
13182 단어 caspringbootkotlin
前回
前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 で で 受け取っ た リクエスト ボディ の 処理 を 表示 表示 する ところ まで 確認 し た た.. の の の の の の の
とりあえず動くようにする.
에라한드링이나 레스폰스코도의 対応は後日.
今回
今回はその関数で受け取った JSON を Usecase に渡して処理していく.
포트
依存性逆転しているので、中央のportから実装していく.
interface PersonPort {
fun getAllPersons(): Persons
fun postPerson(): Person
}
インターフェースで postPerson として作成して
게이트웨이
override fun postPerson(): Person {
TODO("Not yet implemented")
}
Alt Enter 로 추상 함수 구현 を実行して
実装が TODO 状態で Gateway に作成される.
유스케이스
ここまでで、Usecase에서 呼び出してみる.
fun postPerson(person: Person) {
personPort.postPerson(person)
}
返り値はないので返り値と型はなく,
引数だけ型を指定して実行させる.
쉬다
@PostMapping("/persons")
fun postPerson(@RequestBody request: PersonJson): String {
personsUsecase.postPerson(Person(Name(request.name), Age(request.age)))
return request.toString()
}
Rest 와 Usecase を呼び出す.
요청 から中身を取り出して、
사람 ドメインと内部の Name, Age ドメインにいれて呼び出す.
Curl 데리크에스트루
Gateway が TODO の状態で外部から実行してみる
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test", "age":20}' \
http://localhost:8080/persons
{
"timestamp":"2022-10-16T12:22:33.962+00:00",
"status":500,
"error":"Internal Server Error",
"path":"/persons"
}
타르미날의 레스폰스에는 500 が返ってきて
kotlin.NotImplementedError:
An operation is not implemented: Not yet implemented
未開発 エラーが想定通りでる.
TODO だからね.
Gateway でドメインの中身を .value 出して 드라이버 に渡す
override fun postPerson(person: Person) {
personsDriver.add(person.name.value, person.age.value)
}
사람 ドメインで渡されたデータの中身を取り出して
追加するための Driver に渡す
Era-handringは後日.
Driver & Entity に追加する
package com.example.springboot
import org.springframework.stereotype.Component
@Component
class PersonsDriver {
data class PersonEntity(val name: String , val age: Int)
val taro = PersonEntity("taro", 3)
val hana = PersonEntity("hana", 5)
val dom = PersonEntity("Dominique", 11)
val jack = PersonEntity("Jackson", 11)
val persons = listOf<PersonEntity>(taro,hana,dom,jack)
fun findAll(): List<PersonEntity> {
return persons
}
fun add(name: String, age: Int){
val currentPersons = findAll()
}
}
前回まではこうやって、PersonEntity のinstancesである people をデータの本體として、そこから findAll していた.
val persons = mutableListOf(
PersonEntity("taro", 3),
PersonEntity("hana", 5),
PersonEntity("Dominique", 11),
PersonEntity("Jackson", 11),
)
사람 を少し見やすくして, 가변 にした.
この people に付け加えるように今回は実装する.
データストアにいれたい
現状、ちゃんとデータを保持していなかった
게이지 E2E의 성장으로 또는 타데이타스트아를 사용하는
https://codelabs.developers.google.com/codelabs/cloud-spring-datastore#2
ググると GCP のデータストアがでてくる
Android의 데 이타스트를 시작하려면 이것이 불가능하기 때문입니다.
드라이버 で する 추가
fun add(name: String, age: Int){
persons.add(
PersonEntity(name, age),
)
println(persons)
}
people という変数に引数の値からEntitiitiを追加して,
一時的に people を全員表示して確認する
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test", "age":20}' \
http://localhost:8080/persons
PersonJson(name=test, age=20)
[PersonEntity(name=taro, age=3), PersonEntity(name=hana, age=5), PersonEntity(name=Dominique, age=11), PersonEntity(name=Jackson, age=11), PersonEntity(name=test, age=20)]
無事に追加された.
まとめ
휴식에서 POST로 送られ라고 한 JSON 데이타로인메모리로 保存するため에
Usecase에서 Port を通じて渡して
게이트웨이 では Domain から中身を抜いて渡して
Driver で Entity に詰めてEntiti の instancesとして作った変数に追加する.
これで実装できる
今後
POST まで作ったのでまず E2E を追加したい.
しかし、DB ならアサートできるが、変数作っただけのデーターでどう保存されたことをtestできるかは課題.
UUID も発行してないので、testする前にそれをつくってEraーhandringして 200 or 500 を返すようにしたい
Reference
이 문제에 관하여(Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/kotlin-springboot-part-14-usecase-yi-jiang-de-rest-deshou-ketuta-post-no-json-wochu-li-suru-4a8h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)