Open4

Kotlin学習ログ

ふじしろふじしろ

導入

以下の記事が非常にわかりやすかった
Spring BootでサーバーサイドKotlin入門 - Qiita

spring initializrの設定

Project:Gradle Project
Language:Kotlin
Spring Boot:2.7.4
Project Metadate:省略
Packaging:Jar
Java:11

Dependencies(比較のため既存のJavaプロジェクトを参考に指定)

  • Spring Boot DevTools
  • Lombok
  • Spring Web
  • Thymeleaf
  • Spring Data JPA
  • MySQL Driver
  • Validation
ふじしろふじしろ

Javaとの違いで悩んだポイント(※いずれも確証なし。後述の理由からの推測)

アノテーションの要不要

  • @Data:不要
    • 理由 -> Kotlin自体がgetter/setterを勝手に作ってくれるため
  • @RequiredArgsConstructor:不要
    • 理由 -> xxxService(private val xxxRepository: XxxRepository) {...} で記述可能なため

Entityのプロパティ(Javaでいうフィールド)の記述方法

  • varvalか -> val
    • 理由 -> 値セットされたタイミング以降は不変が望ましいため
  • プロパティの初期値について、型をNullable型にしてnullにするか、ゼロ値(0や"")にするか -> Nullable型にしてnullを入れる -> コンストラクタとして引数に設定したら、初期値は不要だった。
    • 理由 -> 何かしらの理由で値がセットされなかった場合に、DB側で拒否することができる(not null制約があれば)。初期値があると登録されてしまう可能性がある。
ふじしろふじしろ

エラー・不具合対応

APIレスポンスでJSONの中身が空になる + アプリが起動できなくなる(Redeclaration: XxxController

起こった事

  • レスポンスのJSONの中身が全て空になった
  • その後、Redeclaration: XxxControllerというエラーが発生し、アプリが起動できなくなった

解決方法
リビルドする。
(メニューバー -> Buildタブ -> Rebuild Project

経緯

  1. 練習がてらデータを登録するAPIを作成
  2. POSTMANからPOSTリクエストを送信
  3. DBにデータは登録されるが、レスポンスのJSONが空という状況に。
  4. データを全件取得するAPIを作成
  5. POSTMANからGETリクエストを送信
  6. レコードの数だけJSONが返ってくるが、中身が空という奇妙な状態に。
  7. 色々いじってみるも解決せず、その上アプリが起動できなくなる。エラーメッセージはRedeclaration: XxxController
  8. 調べてみると以下の記事がヒット。同じようにリビルドしたところ、エラーメッセージは解消。
  9. それと同時にJSONの中身がちゃんと返ってくるようになった。

結論
原因不明の異常時にはとりあえずリビルドしてみる。