事の始まり
Raspberry PiでAPIサーバー作るぜ!
KotlinかC#使いたいぜ
ASP.NET Coreはまだ早いな
Kotlinだ!
Android開発やPHPでよく使ってるからIntelliJだな。
Jerseyというものを使えば良いのか
ってな感じで選びましたが環境構築で詰みまくったのでここに記しておきます。
セットアップ
New Project
Spring Initializrを使います。
Kotlinを選択します。
自分はパッケージの部分はWarを選択しました。わかってる方はjarでも構いません。
Jerseyを選択。(Webが選択されているけど無くても動いたので要らない)
ビルド
早速ビルド
エラー: メイン・メソッドがクラスcom.example.DemoApplicationで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要があります
DemoApplication.ktを開きます。なるほど確かにstaticじゃない。
package com.example import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication class DemoApplication fun main(args: Array<String>) { SpringApplication.run(DemoApplication::class.java, *args) }
staticにしてあげる。
package com.example import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication class DemoApplication{ companion object{ fun main(args: Array<String>) { SpringApplication.run(DemoApplication::class.java, *args) } } }
まだダメっぽい。
多数の決まりごとの上で動いているのでJavaから見た時に同じように見えないといけないっぽい。
※コメント欄でご指摘頂きました。
Kotlinにはstaticという概念が無いそうです。
というわけで@JvmStaticを付けてあげる。
package com.example import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication class DemoApplication{ companion object{ @JvmStatic fun main(args: Array<String>) { SpringApplication.run(DemoApplication::class.java, *args) } } }
ビルド成功、以下にアクセス。
http://localhost:8080/
ダメですね。
そこでターミナルから起動してみる。
mvnw spring-boot:run
動いてますね。
ここはよくわからない。
いちいちコマンド打つのも面倒なのでバッチファイルのプラグイン使って動かしている。
ちゃんとした方法分かる人は教えて。
API追加
それではAPIを追加していきましょう。
ここは躓くところではないので調べてね。
package com.example import org.springframework.stereotype.Component import javax.ws.rs.GET import javax.ws.rs.Path @Component @Path("hello") class Hello { @GET fun hello(): String { return "hello" } }
spring-boot:runして以下にアクセス。
http://localhost:8080/hello
Whitelabel Error Page
ダメっぽいですね。
環境設定
環境設定ファイルを追加します。
ルートを指定してあげます。
package com.example import org.glassfish.jersey.server.ResourceConfig import org.springframework.stereotype.Component import javax.ws.rs.ApplicationPath @Component @ApplicationPath("/") class JerseyConfig : ResourceConfig() { init { packages("com.example") } }
動きましたね。
おまけ Tomcat8で動かす
※最初の選択画面でwarを選択した人向け
パッケージ化
mvnw package
target/demo-0.0.1-SNAPSHOT.war
を好きな名前に変えます。
demo.warにします。
Tomcat8に配置
Tomcat8をダウンロードしてきて適当な場所に設置します。
webappsにdemo.warをコピーします。
bin/startup.batを起動して以下にアクセス。
http://localhost:8080/demo/hello
終わり
開発環境整えるのにメッチャ時間使いました…
まずSpring Initializr使わないでやろうとして詰んでJerseyConfig で詰んでKotlinで詰む。
なんか参考資料少ない気がするよ……
というわけでこれから開発頑張っていこうと思います。
ちなみにapt-getで入れたtomcatでは上手く動かなかったよ!