0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Java+SpringBootでWebAPI作るよ

Posted at

なにこれ?

IntelliJでJava+SpringBootを使ってWebAPIを作るよ。
リクエストボディにJSONで値を渡して、API側で受け取るところまで作るよ。

環境構築

前提環境

Windows11 64bitだよ。

Java開発に必要なJDKをインストールするよ。

  1. https://jdk.java.net/21/
    から、Windows向けのzipファイルをダウンロードするよ。
    SpringBootだったかIntelliJだったかが最新のバージョン22に対応していなかった気がするから21にするよ。
  2. ダウンロード出来たら、適当に解凍して適当なフォルダに配置するよ。
    多分パスに日本語が入らないパスがいいよ。
    とりあえずC:¥Java¥jdk-21.0.2に配置したよ。
  3. パスを通す
    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をインストールするよ。

  1. https://www.jetbrains.com/ja-jp/idea/download/?section=windows
    からインストーラをダウンロードするよ。
    無料のCommunity版はページの下の方にあるよ。ちょっとわかりにくいね。でも無料だから仕方ないね。
    今回は環境をあんまり汚したくなかったからzip版を入れてみたよ。
  2. ダウンロードできたら適当に解凍して、bin\idea64.exeを実行するとIntelliJが起動したよ。
    簡単だね。

プロジェクトひな形を用意するよ

  1. https://start.spring.io/
    でSpringBootプロジェクトのひな型を作ってくれるよ。助かるね。
    初期設定から以下の部分だけ変えて、GENERATEボタンでzipファイルをダウンロードするよ。
    ダウンロードしたら適当なパスに解凍するよ。これも多分日本語が入らないパスがいいと思うよ。
  • Java: 初期設定が17だったけど、21に変更したよ。
  • Dependencies: Spring WebLombokを追加したよ。

IntelliJを起動して、Openボタンで上記回答したフォルダを選択して開くよ。
これで開発が開始できるね。

開発スタート

とりあえずSpringInitialzrで作ったデモを起動してみるよ

  1. 左上のハンバーガーアイコン(以下メインメニューとする)から、Build -> Build Projectを実行すると、ビルドできるよ。
    この時点でつまずいたら、多分プロキシ設定の問題だよ。メインメニュー -> Appearance & behavior -> System Settting -> HTTP Proxy あたりの設定を何とかすればイケるんじゃないかな。
  2. 左ペインのファイルツリーから、demo -> src -> main -> java -> com.example.demo -> DempApplicationをクリックして右ペインにコードを表示しよう。
  3. メインメニュー -> Run -> Debug 'DempApplication.java'を実行すると、デバッグ起動するよ。
    適当なブラウザでhttp://localhost:8080/でアクセスしてなんかエラーページが表示されたら成功だよ。失敗してたらサイトにアクセスできないって言われるからね。

単純なAPIを作ってみるよ。

ネームスペース分けるのも面倒だからDempApplicationと同じフォルダに新規コントローラクラス作るよ。
名前は適当にOtaconにしたよ。お試しコントローラの略だよ。

Otacon.java
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クラスは別に内部クラスで作る必要はないと思うよ。面倒だからここに作っただけなんだ。

Otacon.java バージョン2
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側で参照できるようになったね!
おわるよ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?