業務でサーバーサイドをやることになったのでその練習のためにやったことをまとめました。
サーバーの経験は一瞬くらいしかありません🥺🥺🥺(Javaの入門書をこなしたくらい...)
前提
まず@getMapping
でStringを返すというやり方は
@sugasaki さんのKotlin + Spring Boot でHello! World!がシンプルでわかりやすくてよかったです。多謝🙏
(Spring Initializrの様子が変わっていたので注意が必要ですね)
▼▼▼ 参考に考えてみたコード
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class GetJsonController {
@GetMapping("/get")
fun getJson(): String {
return "私はここでJSONを返したい"
}
}
returnでJSONを返したい気持ち
単にreturn
の中の文字列をJSONっぽくしてみました。
@GetMapping("/get")
fun getJson(): String {
return "{\"id\": 1, \"name\": \"test\"}" // エスケープしんどいですね!
}
エスケープがちょっとしんどい形をしていたので調べてみましたが
"""
で囲うことでも同じことができるみたいです。
→【Kotlin入門】ダブルクォーテーションの中にダブルクォーテーションを表現する方法
@GetMapping("/get")
fun getJson(): String {
return """{"id": 1, "name": "test"}"""
}
returnで作ったJSONを返したい気持ち
いちいち手打ちするのはつらいので、JSONを作って投げたいと思います。
(昔、JSONファイルを何とかしたい時、Jacksonを使ったような...)と思い出したので
build.gradle
をチェックしてみます。
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
あ、バッチリ入ってますね!早速使いたいと思います。
(初めて聞いた時は、ジェイソンなの?ジャクソンなの??人名???ってなりましたよね〜...)
👾👾👾
まず@JsonCreator
するためのクラスを作りました。
package com.example.demo
import com.fasterxml.jackson.annotation.JsonCreator
data class Data @JsonCreator constructor (
val id: Int,
val title: String
)
書いていて「え?data class ~~ constructor()って何?」ってなった自分のために
→ Kotlinのdata classのコンストラクタについて現役エンジニアが解説【初心者向け】
ControllerでこのDataクラスを使うように書き換えます。
@RestController
class GetJsonController {
@GetMapping("/get")
fun getJson(): Data { // 返り値の型をDataにして
val data = Data(
id = 1,
title = "create JSON!"
) // Data()を使って値を入れて
return data // dataを返します
}
}
ここまでspring+kotlinでJSONのリクエストとレスポンスをやってみたと
How to build a Simple REST API with Kotlin and Spring Bootを参考にしました🙏🙏
リクエスト時のパラメータを使って作ったJSONを返したい気持ち
できるんじゃないかな?と思ったのでやってみます。
@RequestMapping
と@RequestParam
を追加してみます。
@RestController
@RequestMapping
class GetJsonController {
@GetMapping("/get")
fun getJson(@RequestParam(value = "title", required = false, defaultValue = "Test title") title: String,
@RequestParam(value = "id", required = false, defaultValue = "1") id: String): Data {
val data = Data(
id = "$id".toInt(),
title = "$title"
)
return data
}
}
これで、パラメーターに?title='hogehoge'&id=4
などと入れると反映されるようになりました。