fetch()とSpring Boot APIを連携する方法|新人エンジニア向けにJavaScriptと@RestControllerを解説
こんにちは。ゆうせいです。
今回は、JavaScriptのfetch()とSpring Boot APIを連携する方法を、新人エンジニア向けに解説します。
Webアプリケーションを学んできた人は、これまでHTMLフォームを使ってSpring Bootへ値を送っていたと思います。
<form action="/users/register" method="post">
<input name="name">
<button type="submit">送信</button>
</form>この方法では、送信ボタンを押すと画面全体が遷移します。
一方、fetch()を使うと、画面全体を再読み込みせずに、JavaScriptからSpring Boot APIへHTTPリクエストを送れます。
たとえるなら、HTMLフォームは「窓口へ紙の申請書を持っていく方法」です。
fetch()は「スマホで窓口にデータだけ送る方法」です。
画面はそのままにして、裏側でデータの取得や登録ができます。
MDNでは、fetch()はHTTPリクエストを行いレスポンスを処理するためのJavaScriptインターフェイスであり、Promiseベースで動作すると説明されています。fetch()が返すPromiseは、サーバーのレスポンスを表すResponseオブジェクトで解決され、response.json()などで本文を取り出せます。
fetch()とSpring Boot APIの関係
まず、全体像を見てください。
HTML画面
↓
JavaScriptのfetch()
↓
Spring Bootの@RestController
↓
Service
↓
DAOまたはRepository
↓
DB
fetch()は、ブラウザ側のJavaScriptからHTTP通信を行うための機能です。
Spring Boot APIは、@RestControllerで作る「JSONなどのデータを返す入口」です。
| 部品 | 役割 |
|---|---|
| HTML | 入力欄やボタンを表示する |
| JavaScript | ボタン押下時にfetch()で通信する |
| fetch() | Spring Boot APIへHTTPリクエストを送る |
| @RestController | リクエストを受け取り、JSONを返す |
| @RequestBody | 送られてきたJSONをJavaオブジェクトに変換する |
| ResponseEntity | HTTPステータスとレスポンス本文を返す |
つまり、fetch()と@RestControllerを組み合わせると、画面をリロードせずにSpring Bootとデータをやり取りできます。
今回作るサンプル
今回は、ユーザー名とメールアドレスを画面から入力し、fetch()でSpring Boot APIへ送信します。
Spring Boot側はJSONを受け取り、登録できた想定でJSONを返します。
画面で名前とメールアドレスを入力
↓
登録ボタンを押す
↓
fetch()でJSONをPOST送信
↓
Spring Boot APIが@RequestBodyで受け取る
↓
登録結果のJSONを返す
↓
JavaScriptが結果を画面に表示する
この流れを理解できると、JavaScriptとSpring Bootを分けた開発の第一歩がつかめます。
Spring Boot側のDTOを作る
まず、APIで受け取るリクエスト用DTOを作ります。
DTOとは、Data Transfer Objectの略です。
データを運ぶための箱だと考えてください。
package com.example.demo.dto;
public class UserCreateRequest {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}このクラスは、JavaScriptから送られてくるJSONを受け取るための箱です。
たとえば、JavaScriptから次のJSONを送ります。
{
"name": "山田太郎",
"email": "yamada@example.com"
}Spring Bootは、このJSONをUserCreateRequestに変換します。
| JSON | Java |
|---|---|
| "name" | private String name |
| "email" | private String email |
JSONのキー名とJavaのプロパティ名を合わせるのが基本です。
レスポンス用DTOを作る
次に、APIから返すレスポンス用DTOを作ります。
package com.example.demo.dto;
public class UserCreateResponse {
private int userId;
private String name;
private String email;
private String message;
public UserCreateResponse(int userId, String name, String email, String message) {
this.userId = userId;
this.name = name;
this.email = email;
this.message = message;
}
public int getUserId() {
return userId;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getMessage() {
return message;
}
}Spring Boot APIは、このJavaオブジェクトをJSONに変換して返します。
返却されるJSONのイメージです。
{
"userId": 1,
"name": "山田太郎",
"email": "yamada@example.com",
"message": "ユーザー登録が完了しました。"
}@RestControllerでは、Javaオブジェクトを返すと、Spring側の仕組みによってJSONなどのレスポンス本文に変換されます。@RestControllerは@Controllerと@ResponseBodyを合わせた便利なアノテーションであり、戻り値がレスポンス本文として扱われます。
Spring Bootの@RestControllerを作る
次に、fetch()から呼び出されるAPIを作ります。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateRequest;
import com.example.demo.dto.UserCreateResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@PostMapping("/api/users")
public ResponseEntity<UserCreateResponse> createUser(
@RequestBody UserCreateRequest request) {
UserCreateResponse response = new UserCreateResponse(
1,
request.getName(),
request.getEmail(),
"ユーザー登録が完了しました。"
);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(response);
}
}このAPIは、POST /api/usersを受け取ります。
@RequestBodyは、リクエスト本文のJSONをJavaオブジェクトへ変換するために使います。Spring Frameworkの公式ドキュメントでも、@RequestBodyはリクエスト本文を読み取り、HttpMessageConverterを通じてオブジェクトへ変換するために使うと説明されています。
| コード | 意味 |
|---|---|
| @RestController | JSONなどのデータを返すControllerにする |
| @PostMapping("/api/users") | POST /api/usersを受け取る |
| @RequestBody UserCreateRequest request | 送られてきたJSONをJavaオブジェクトにする |
| ResponseEntity | HTTPステータスとJSON本文を返す |
| HttpStatus.CREATED | 201 Createdを返す |
201 Createdは、「新しいデータを作成しました」という意味のHTTPステータスです。
登録APIでは、200 OKより201 Createdを使うとAPIらしい表現になります。
HTML画面を作る
次に、入力画面を作ります。
今回はThymeleafを使わず、まずは普通のHTMLとして書きます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fetchとSpring Boot API連携サンプル</title>
</head>
<body>
<h1>ユーザー登録</h1>
<div>
<label for="name">名前</label>
<input type="text" id="name">
</div>
<div>
<label for="email">メールアドレス</label>
<input type="email" id="email">
</div>
<button type="button" id="registerButton">登録</button>
<p id="resultArea"></p>
<script src="/js/user-register.js"></script>
</body>
</html>
ポイントは、buttonのtypeをbuttonにしていることです。
<button type="button" id="registerButton">登録</button>
type="submit"にすると、フォーム送信で画面遷移が起きることがあります。
今回はfetch()で通信したいので、type="button"にしています。
また、結果表示用にresultAreaを用意しています。
<p id="resultArea"></p>
APIから返ってきたメッセージを、この場所に表示します。
JavaScriptでfetch()を書く
次に、JavaScriptを書きます。
ファイルの場所は、Spring Bootなら次のようにします。
src/main/resources/static/js/user-register.js
user-register.jsです。
document.getElementById("registerButton").addEventListener("click", function () {
const name = document.getElementById("name").value;
const email = document.getElementById("email").value;
const requestData = {
name: name,
email: email
};
fetch("/api/users", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(requestData)
})
.then(function (response) {
if (!response.ok) {
throw new Error("API通信でエラーが発生しました。");
}
return response.json();
})
.then(function (data) {
document.getElementById("resultArea").textContent =
data.message + " ID: " + data.userId;
})
.catch(function (error) {
document.getElementById("resultArea").textContent =
"登録に失敗しました。";
console.error(error);
});
});
このJavaScriptが、HTML画面とSpring Boot APIをつなぐ役割を持ちます。
fetch()の中身を分解する
fetch()の基本形は次のようになります。
fetch("URL", {
method: "HTTPメソッド",
headers: {
"Content-Type": "送るデータの種類"
},
body: "送るデータ"
})
今回のコードでは、次の意味になります。
| fetchの設定 | 意味 |
|---|---|
| "/api/users" | Spring Boot APIのURL |
| method: "POST" | POSTで送信する |
| Content-Type: "application/json" | JSONを送ることを伝える |
| body: JSON.stringify(requestData) | JavaScriptオブジェクトをJSON文字列に変換して送る |
JavaScriptのオブジェクトをそのままbodyに入れることはできません。
JSON.stringify()でJSON文字列に変換します。
body: JSON.stringify(requestData)
お弁当でたとえるなら、JavaScriptオブジェクトは料理そのものです。
JSON.stringify()は、その料理を配送用の箱に詰める作業です。
箱に詰めて初めて、HTTP通信で送れる形になります。
response.json()とは何か
APIから返ってきたレスポンスは、そのままではJavaScriptオブジェクトとして使えません。
JSONとして取り出すために、response.json()を使います。
return response.json();
MDNでは、fetch()で得たResponseに対して適切なメソッドを呼び出すことで、レスポンス本文をtextやJSONなどの形式で取り出せると説明されています。
Spring Boot APIが次のJSONを返したとします。
{
"userId": 1,
"name": "山田太郎",
"email": "yamada@example.com",
"message": "ユーザー登録が完了しました。"
}response.json()を使うと、JavaScript側では次のように扱えます。
data.userId data.name data.email data.message
JSON文字列をJavaScriptで使える形に変換するのがresponse.json()です。
GETでデータを取得するAPI
POSTだけでなく、GETでデータを取得する例も見てみましょう。
Spring Boot側です。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateResponse;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users")
public List<UserCreateResponse> findAllUsers() {
List<UserCreateResponse> users = new ArrayList<>();
users.add(new UserCreateResponse(1, "山田太郎", "yamada@example.com", "取得成功"));
users.add(new UserCreateResponse(2, "鈴木花子", "suzuki@example.com", "取得成功"));
return users;
}
}JavaScript側です。
fetch("/api/users")
.then(function (response) {
if (!response.ok) {
throw new Error("ユーザー一覧の取得に失敗しました。");
}
return response.json();
})
.then(function (userList) {
console.log(userList);
const resultArea = document.getElementById("resultArea");
resultArea.textContent = "";
userList.forEach(function (user) {
const p = document.createElement("p");
p.textContent = user.userId + ": " + user.name + " " + user.email;
resultArea.appendChild(p);
});
})
.catch(function (error) {
console.error(error);
});GETの場合、methodを省略するとGETになります。
データ取得ではGET。
新規登録ではPOST。
まずはこの対応を覚えてください。
| 目的 | HTTPメソッド | fetchの書き方 |
|---|---|---|
| 一覧取得 | GET | fetch("/api/users") |
| 詳細取得 | GET | fetch("/api/users/1") |
| 新規登録 | POST | fetch("/api/users", { method: "POST", ... }) |
| 更新 | PUT | fetch("/api/users/1", { method: "PUT", ... }) |
| 削除 | DELETE | fetch("/api/users/1", { method: "DELETE" }) |
asyncとawaitで書く方法
fetch()はthenで書けますが、asyncとawaitを使うと、上から順に処理しているように書けます。
document.getElementById("registerButton").addEventListener("click", async function () {
const name = document.getElementById("name").value;
const email = document.getElementById("email").value;
const requestData = {
name: name,
email: email
};
try {
const response = await fetch("/api/users", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(requestData)
});
if (!response.ok) {
throw new Error("API通信でエラーが発生しました。");
}
const data = await response.json();
document.getElementById("resultArea").textContent =
data.message + " ID: " + data.userId;
} catch (error) {
document.getElementById("resultArea").textContent =
"登録に失敗しました。";
console.error(error);
}
});asyncは、「この関数の中でawaitを使います」という印です。
awaitは、「処理が終わるまで待ちます」という意味です。
電話でたとえるなら、fetch()は相手に電話をかける処理です。
awaitは、相手が返事をするまで待つことです。
Spring Boot側でバリデーションする
APIでも、サーバー側バリデーションは必要です。
画面側のJavaScriptで入力チェックしていても、直接APIを叩けば回避できるからです。
まず、DTOにバリデーションを追加します。
package com.example.demo.dto;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
public class UserCreateRequest {
@NotBlank(message = "名前を入力してください。")
private String name;
@NotBlank(message = "メールアドレスを入力してください。")
@Email(message = "メールアドレスの形式で入力してください。")
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}Controllerでは、@Validを付けます。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateRequest;
import com.example.demo.dto.UserCreateResponse;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@PostMapping("/api/users")
public ResponseEntity<UserCreateResponse> createUser(
@Valid @RequestBody UserCreateRequest request) {
UserCreateResponse response = new UserCreateResponse(
1,
request.getName(),
request.getEmail(),
"ユーザー登録が完了しました。"
);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(response);
}
}@RequestBodyは@Validと組み合わせて使えます。Spring Frameworkのドキュメントでも、@RequestBodyはjakarta.validation.ValidやSpringの@Validatedと組み合わせられ、検証エラーはデフォルトでMethodArgumentNotValidExceptionになり、400 Bad Requestレスポンスにつながると説明されています。
APIでは、入力エラー時にJSONでエラーを返すようにすると、JavaScript側で扱いやすくなります。
@RestControllerAdviceでAPIエラーをJSON化する
バリデーションエラーをJSONで返すため、@RestControllerAdviceを作ります。
package com.example.demo.exception;
import java.util.ArrayList;
import java.util.List;
public class ApiErrorResponse {
private int status;
private String message;
private List<String> errors;
public ApiErrorResponse(int status, String message, List<String> errors) {
this.status = status;
this.message = message;
this.errors = errors;
}
public int getStatus() {
return status;
}
public String getMessage() {
return message;
}
public List<String> getErrors() {
return errors;
}
}
package com.example.demo.exception;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ApiErrorResponse> handleValidationException(
MethodArgumentNotValidException e) {
List<String> errors = new ArrayList<>();
e.getBindingResult().getFieldErrors().forEach(functionError -> {
errors.add(functionError.getDefaultMessage());
});
ApiErrorResponse response = new ApiErrorResponse(
400,
"入力内容にエラーがあります。",
errors
);
return ResponseEntity
.status(HttpStatus.BAD_REQUEST)
.body(response);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ApiErrorResponse> handleException(Exception e) {
List<String> errors = new ArrayList<>();
errors.add("サーバー内部でエラーが発生しました。");
ApiErrorResponse response = new ApiErrorResponse(
500,
"予期しないエラーが発生しました。",
errors
);
return ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(response);
}
}
このようにしておくと、入力エラー時に次のようなJSONを返せます。
{
"status": 400,
"message": "入力内容にエラーがあります。",
"errors": [
"名前を入力してください。",
"メールアドレスの形式で入力してください。"
]
}APIのエラー形式をそろえると、JavaScript側でエラー表示を作りやすくなります。
JavaScript側でエラーJSONを表示する
400エラー時に、Spring Bootから返ったJSONを画面に表示してみましょう。
document.getElementById("registerButton").addEventListener("click", async function () {
const name = document.getElementById("name").value;
const email = document.getElementById("email").value;
const requestData = {
name: name,
email: email
};
try {
const response = await fetch("/api/users", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(requestData)
});
const data = await response.json();
if (!response.ok) {
document.getElementById("resultArea").textContent =
data.errors.join(" ");
return;
}
document.getElementById("resultArea").textContent =
data.message + " ID: " + data.userId;
} catch (error) {
document.getElementById("resultArea").textContent =
"通信に失敗しました。";
console.error(error);
}
});このコードでは、response.okがfalseの場合、エラーメッセージを表示します。
if (!response.ok) {
document.getElementById("resultArea").textContent =
data.errors.join(" ");
return;
}response.okは、HTTPステータスが成功範囲かどうかを見るために便利です。
fetch()では、404や500でも通信自体が完了していればthenやawaitの続きに進む点に注意してください。
つまり、HTTPエラーは自分でresponse.okを見て判断する必要があります。
CORSエラーとは何か
fetch()とSpring Boot APIを連携するとき、よく出るのがCORSエラーです。
CORSとは、Cross-Origin Resource Sharingの略です。
ブラウザの安全機能の1つです。
たとえば、HTML画面が次のURLで動いているとします。
http://localhost:3000
Spring Boot APIが次のURLで動いているとします。
http://localhost:8080
ポート番号が違うため、ブラウザから見ると別オリジンです。
この状態でfetch()すると、CORSエラーが出ることがあります。
Spring FrameworkのCORSドキュメントでは、セキュリティ上の理由から、ブラウザは現在のオリジン外へのAJAX呼び出しを禁止しており、CORSによって許可するクロスドメインリクエストを指定できると説明されています。
| URL | 意味 |
|---|---|
| http://localhost:3000 | フロントエンド開発サーバー |
| http://localhost:8080 | Spring Boot API |
| ポートが違う | 別オリジン扱いになる |
同じ家に見えても、玄関が違う建物として扱われるイメージです。
@CrossOriginでCORSを許可する
開発中の簡単な対応として、Controllerに@CrossOriginを付ける方法があります。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateRequest;
import com.example.demo.dto.UserCreateResponse;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@CrossOrigin(origins = "http://localhost:3000")
@RestController
public class UserApiController {
@PostMapping("/api/users")
public ResponseEntity<UserCreateResponse> createUser(
@Valid @RequestBody UserCreateRequest request) {
UserCreateResponse response = new UserCreateResponse(
1,
request.getName(),
request.getEmail(),
"ユーザー登録が完了しました。"
);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(response);
}
}originsには、許可したいフロントエンドのURLを書きます。
@CrossOrigin(origins = "http://localhost:3000")
ただし、実務で何でも許可する設定は危険です。
@CrossOrigin(origins = "*")
学習用なら見かけることがありますが、本番では許可するオリジンを必要最小限にしましょう。
fetch()とSpring Boot APIでよくあるミス
| ミス | 原因 | 対策 |
|---|---|---|
| Spring Boot側で値がnullになる | JSONキー名とDTOプロパティ名が違う | name、emailなどの名前を合わせる |
| 415 Unsupported Media Typeになる | Content-Typeを付けていない | application/jsonを指定する |
| 400 Bad Requestになる | JSON形式が壊れている、型が違う | JSON.stringifyを使う |
| 404 Not Foundになる | URLが違う | fetchのURLと@PostMappingを確認する |
| CORSエラーになる | フロントエンドとAPIのオリジンが違う | @CrossOriginやCORS設定を行う |
| 画面に[object Object]と出る | オブジェクトをそのままtextContentに入れている | data.messageなど具体的なプロパティを使う |
fetch()連携のエラーは、ブラウザのConsoleとNetworkを見ると原因がわかりやすいです。
ConsoleはJavaScriptエラーを見る場所です。
NetworkはHTTPリクエストとレスポンスを見る場所です。
新人エンジニアは、fetch()で困ったら必ず開発者ツールを開いてください!
Networkタブで見るべきポイント
| 見る場所 | 確認内容 |
|---|---|
| Request URL | 正しいAPI URLへ送っているか |
| Request Method | GET、POST、PUT、DELETEが合っているか |
| Status Code | 200、201、400、404、500など |
| Request Headers | Content-Typeがapplication/jsonか |
| Request Payload | 送ったJSONが正しいか |
| Response | Spring Bootから返ってきたJSON |
fetch()のデバッグは、サーバー側ログだけでは足りません。
ブラウザから何を送ったのか、Spring Bootから何が返ったのかを両方見る必要があります。
HTMLフォーム送信とfetch()の違い
| 比較 | HTMLフォーム送信 | fetch() |
|---|---|---|
| 送信方法 | form submit | JavaScriptでHTTP通信 |
| 画面遷移 | 基本的に画面が切り替わる | 画面を切り替えずに通信できる |
| 送る形式 | フォームデータが多い | JSONが多い |
| Spring Boot側 | @RequestParam、@ModelAttribute | @RequestBody |
| 向いている場面 | シンプルな画面遷移 | 部分更新、SPA、API連携 |
どちらが絶対に正しい、という話ではありません。
画面遷移を前提にしたWebアプリならHTMLフォームで十分なこともあります。
画面の一部だけを更新したい場合や、ReactやVueなどのフロントエンドと連携する場合はfetch()が向いています。
最小構成の対応関係
fetch()とSpring Boot APIの対応関係をまとめます。
| JavaScript | Spring Boot | 意味 |
|---|---|---|
| fetch("/api/users") | @PostMapping("/api/users") | URLが対応する |
| method: "POST" | @PostMapping | HTTPメソッドが対応する |
| Content-Type: application/json | @RequestBody | JSONとして受け取る |
| JSON.stringify(requestData) | UserCreateRequest | JSONをDTOへ変換する |
| response.json() | UserCreateResponse | 返ってきたJSONをJavaScriptで使う |
この対応関係を押さえると、fetch()連携のコードがかなり読みやすくなります。
まとめ
fetch()とSpring Boot APIを連携すると、画面全体を再読み込みせずに、JavaScriptからSpring Bootへデータを送ったり、Spring BootからJSONを受け取ったりできます。
Spring Boot側では@RestController、@RequestBody、ResponseEntityを使います。
JavaScript側ではfetch()、JSON.stringify()、response.json()を使います。
| 役割 | 使うもの |
|---|---|
| APIを作る | @RestController |
| JSONを受け取る | @RequestBody |
| JSONを送る | fetch()、JSON.stringify() |
| JSONを読む | response.json() |
| ステータスを返す | ResponseEntity |
| 別オリジンを許可する | @CrossOriginまたはCORS設定 |
一言でまとめるなら、fetch()は「ブラウザからSpring Boot APIへデータを送るJavaScriptの通信係」です。
新人エンジニアは、まず次の流れを覚えてください。
HTMLの入力値を取得する
↓
JavaScriptオブジェクトを作る
↓
JSON.stringifyでJSON文字列にする
↓
fetchでSpring Boot APIへPOSTする
↓
@RequestBodyでJava DTOとして受け取る
↓
ResponseEntityでJSONを返す
↓
response.jsonでJavaScript側が受け取る
今後の学習では、fetch()、Promise、async/await、JSON.stringify、response.json、@RestController、@RequestBody、ResponseEntity、CORS、ブラウザのNetworkタブを順番に学ぶとよいです。まずは小さな登録APIを作り、JavaScriptからPOSTして、返ってきたJSONを画面に表示してみましょう!
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。
最新の投稿
新人エンジニア研修講師2026年6月18日JavaのOptionalでnullを安全に扱う方法|NullPointerExceptionを防ぎ、DAOの戻り値をわかりやすくする
新人エンジニア研修講師2026年6月18日ローカルSMTPを使って問い合わせ完了メールを送る方法|新人エンジニア研修向けにSpring BootとJavaMailSenderを解説
新人エンジニア研修講師2026年6月18日DevToolsでHTTP通信・エラー・DOMを確認する方法|新人エンジニア向けにブラウザ開発者ツールを解説
新人エンジニア研修講師2026年6月18日Spring Bootの@RestControllerとは?Webアプリケーションを学んだ新人エンジニア向けにAPIをやさしく解説
