DEV Community

kaede
kaede

Posted on • Edited on

Kotlin Springboot -- Part 13 REST で決まった形の JSON データの入った POST リクエストを受け取れるようにする

Spring MVC と Spring Webflux

https://zenn.dev/tm35/articles/05e74b6dd9f831#%40requestbody

Spring MVC では

Postmapping と 関数の引数の RequestBody で中身を引き取れるらしい

https://www.baeldung.com/spring-mvc-async-vs-webflux

Spring Webflux では別の書き方になる。
こちらではリアクティブに書けるため、非同期で完全に作れるのがメリットらしい。

今回は Spring MVC での実装になる。


実装

外側から受け取るので、 REST の Resource.kt に書く。

@RestController
class PersonHandler(
// .....
  @PostMapping("/persons")
  fun postPerson(@RequestBody request: PersonJson): String {
    return request.toString()
  }
Enter fullscreen mode Exit fullscreen mode

GET とおなじ URL で Postmapping を作る
リクエストをちゃんと受け取れいているか確認する。
そのため、Usecase は一旦呼ばずに、リクエストを String にして返す。

data class PersonJson (
  val name: String,
  val age: Int,
)
Enter fullscreen mode Exit fullscreen mode

PersonJson は以前の回で GET を作る時に、
ドメインから JSON 変換用にするためにこれを作成した。
POST でも JSON の受け取りのために同じものを利用する。


curl -XPOST で叩く

https://weblabo.oscasierra.net/curl-post/

実行は curl で叩く

curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test", "age":20}' \
http://localhost:8080/persons
Enter fullscreen mode Exit fullscreen mode

-H でヘッダーにデータの形式は json だよと教えて
-d で json データを添える
最後に叩く URL の叩き先を書く。

{name=test, age=20}

すると、送ったものが key = value の形で返ってくる。

が入って送信されているのがわかる。

    println(request.name)
Enter fullscreen mode Exit fullscreen mode

test

リクエストのひとつひとつは reqeust.keyName でアクセスできる。


まとめ

Kotlin Springboot Spring MVC で
POST リクエストで JSON データを受け取るには

@PostMapping("/your/url)" 
Enter fullscreen mode Exit fullscreen mode

で /your/url に POST された時に動くハンドラ関数を書き

functionName(@RequestBody request: YourJsonType)
Enter fullscreen mode Exit fullscreen mode

ハンドラ関数では、こうやって引数で予め決めておいた Key Value の JSON のリクエストを受け取り

関数の処理内部で request.key で取り出して使うことができる。


Top comments (0)