なにこれ?
IntelliJでJava+SpringBootを使ってWebAPIを作るよ。
リクエストボディにJSONで値を渡して、API側で受け取るところまで作るよ。
環境構築
前提環境
Windows11 64bitだよ。
Java開発に必要なJDKをインストールするよ。
-
https://jdk.java.net/21/
から、Windows向けのzipファイルをダウンロードするよ。
SpringBootだったかIntelliJだったかが最新のバージョン22に対応していなかった気がするから21にするよ。 - ダウンロード出来たら、適当に解凍して適当なフォルダに配置するよ。
多分パスに日本語が入らないパスがいいよ。
とりあえずC:¥Java¥jdk-21.0.2
に配置したよ。 - パスを通す
Windowsの環境変数に以下の通り設定するよ。
名称 | 値 | |
---|---|---|
新規 | JAVA_HOME | C:¥Java¥jdk-21.0.2 |
追加 | PATH | %JAVA_HOME%\bin |
これでコマンドプロンプトで以下のようにJavaが動く状態になるよ。
> java --version
openjdk version "21.0.2" 2024-01-16
OpenJDK Runtime Environment (build 21.0.2+13-58)
OpenJDK 64-Bit Server VM (build 21.0.2+13-58, mixed mode, sharing)
IntelliJをインストールするよ。
-
https://www.jetbrains.com/ja-jp/idea/download/?section=windows
からインストーラをダウンロードするよ。
無料のCommunity版はページの下の方にあるよ。ちょっとわかりにくいね。でも無料だから仕方ないね。
今回は環境をあんまり汚したくなかったからzip版を入れてみたよ。 - ダウンロードできたら適当に解凍して、
bin\idea64.exe
を実行するとIntelliJが起動したよ。
簡単だね。
プロジェクトひな形を用意するよ
-
https://start.spring.io/
でSpringBootプロジェクトのひな型を作ってくれるよ。助かるね。
初期設定から以下の部分だけ変えて、GENERATEボタンでzipファイルをダウンロードするよ。
ダウンロードしたら適当なパスに解凍するよ。これも多分日本語が入らないパスがいいと思うよ。
- Java: 初期設定が17だったけど、21に変更したよ。
- Dependencies:
Spring Web
とLombok
を追加したよ。
IntelliJを起動して、Openボタンで上記回答したフォルダを選択して開くよ。
これで開発が開始できるね。
開発スタート
とりあえずSpringInitialzrで作ったデモを起動してみるよ
- 左上のハンバーガーアイコン(以下メインメニューとする)から、
Build
->Build Project
を実行すると、ビルドできるよ。
この時点でつまずいたら、多分プロキシ設定の問題だよ。メインメニュー
->Appearance & behavior
->System Settting
->HTTP Proxy
あたりの設定を何とかすればイケるんじゃないかな。 - 左ペインのファイルツリーから、
demo
->src
->main
->java
->com.example.demo
->DempApplication
をクリックして右ペインにコードを表示しよう。 -
メインメニュー
->Run
->Debug 'DempApplication.java'
を実行すると、デバッグ起動するよ。
適当なブラウザでhttp://localhost:8080/
でアクセスしてなんかエラーページが表示されたら成功だよ。失敗してたらサイトにアクセスできないって言われるからね。
単純なAPIを作ってみるよ。
ネームスペース分けるのも面倒だからDempApplication
と同じフォルダに新規コントローラクラス作るよ。
名前は適当にOtacon
にしたよ。お試しコントローラの略だよ。
package com.example.demo;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/OtaAPI")
public class Otacon {
@GetMapping("/simpleHoge")
public ResponseEntity<String> simpleApi() {
return ResponseEntity.ok("hogehoge");
}
}
このクラスを作ったら、またDempApplication
を右ペインに表示してデバッグ実行するよ。
下ペインのTerminalに以下のコマンドを打ち込むと、hogehoge
という文字列を得られるよ。
> curl http://localhost:8080/OtaAPI/simpleHoge
hogehoge
JSONを受け取るよ
Otacon.java
を改造するよ。json1
メソッドとInput
クラスを追加したよ。
Input
クラスは別に内部クラスで作る必要はないと思うよ。面倒だからここに作っただけなんだ。
package com.example.demo;
import lombok.Data;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/OtaAPI")
public class Otacon {
@GetMapping("/simpleHoge")
public ResponseEntity<String> simpleApi() {
return ResponseEntity.ok("hogehoge");
}
@PostMapping("/json1api")
public ResponseEntity<String> json1(@RequestBody Input input) {
return ResponseEntity.ok(input.key2+"/"+input.key1);
}
@Data
public static class Input {
private String key1;
private String key2;
}
}
これでコマンドプロンプトで以下のようにJavaが動く状態になるよ。
> curl http://localhost:8080/OtaAPI/json1api -X POST -d "{\"key1\":\"キー1\",\"key2\":\"キー2\"}" -H "Content-Type: application/json"
キー2/キー1
余談だけど、コマンドプロンプトでのJSON送付が独特でだいぶ詰まったよ。
以下の記事を参考にさせてもらったよ。ありがとう!
以上でリクエストボディに設定した値をAPI側で参照できるようになったね!
おわるよ。