【Sprint Boot2】GETリクエストでクライアント側からサーバサイドへデータ送信【クエリストリング】

Sprint BootのWebアプリで、HTTPのGETリクエストでクエリストリングを使ってクライアント側からサーバサイドへデータの受け渡しについて説明しています。Spring Bootの初心者・入門者の方は、参考にしてください。

※ 本ページはプロモーションが含まれています。

環境と今回の目的

最終更新日:2022/11/22

本記事では、Spring Bootのウェブアプリで、HTTPのGETリクエストでクエリストリングを使って、クライアント側からサーバサイドへのデータの受け渡しをやっていきます。

・開発環境やバージョンは以下の通りです。
OS:macOS Catalina(バージョン10.15.5)
->Webアプリ内の話なのでWindowsでも同じかと思います。
開発環境:Eclipse(Pleiades All in One、4.16(2020-06)、Java Full Edition版)
Spring Boot:バージョン2.7.5
Java:11

◾️Eclipse(Pleiades All in One、Java Full Edition版)
Eclipse(Pleiades All in One、Java Full Edition版)は、最初からEclipseの日本語化がされていますし、STS(Spring Tool Suite)やLombokなどの複数の有用なプラグインも入っていて設定済みなので、開発環境構築の手間が省けます。
Eclipseの導入については別ページに書いていますので、参考にしてください。

【Java初心者】Eclipse(Pleiades All in One)をインスールしてJava開発ができるようにする【macOS版】

HTTPのGETリクエストのクエリストリングとは?

クエリストリングについて簡単に説明しておきます。クエリストリング(クエリ文字列、リクエストパラメータ、URLパラメータ)とは、下のURLのように"?"以降に"key=value"という書式でいくつも"&"でつなぐ事で、URLリクエスト時に、クライアント側からサーバへデータを送信する事ができます。

https://it-jog.com/testquerystr?fruit=orange&animal=%E7%8C%AB

このURLは、"https://it-jog.com/testquerystr"にリクエストし、その際、fruitというキーで"orange"、animalというキーで"%E7%8C%AB"というデータを同時に送信しています。”%E7%8C%AB”は、日本語の"猫"をURLエンコーディングしています。

サーバサイドのControllerクラスの作成、@RequestParam、@GetMapping

別ページで、EclipseでのSpring Bootプロジェクトのひな形の作成をして簡単なWebアプリ(Webサイト)の作成から実行までを説明していますので、そちらを参考にしてください。
Spring Boot3 + MySQL(MariaDB)のウェブ開発入門
Sprint Boot2で初めてのJavaのウェブアプリ開発(DB無しのWebサイト)

それでは、サーバサイドのコントローラクラスを作成します。こちらのページで作成したHelloControllerクラスに、"testquerystr"という新しいメソッドを追加します。

testquerystrメソッドを追加したHelloController.javaクラスのコードです(ここではhelloメソッドとtest2メソッドは関係ないので、無視して構いません。)

package com.example.demo.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

	@RequestMapping("/hello")
	public String hello() {
		return "hello";
	}

	@RequestMapping("/test2")
	public String test2(Model model) {
		model.addAttribute("data", "レスポンステスト");
		model.addAttribute("data2", 100);
		return "test2";
	}

	//今回追加したメソッド
	//@RequestMapping("/testquerystr")
	@GetMapping("/testquerystr")
	@ResponseBody
	public String testquerystr(@RequestParam String fruit, @RequestParam String animal ) {
		String str = "";
		str = str.concat("fruit is " + fruit + "<br>");
		str = str.concat("animal is " + animal + "<br>");
		return str;
	}
}

URLのクエリストリングの文字列をサーバサイドで受け取るには、メソッドの引数に@RequestParamを使います。

また、クエリストリングのキーの名前とtestquerystrメソッド内で受け取る変数名が異なる場合、@RequestParamの引数にクエリストリングのキーの名前を指定する必要があります。

public String testquerystr(@RequestParam("fruit") String str1, @RequestParam("animal") String str2)

もちろん、@RequestParamの引数名とtestquerystrメソッド内で受け取る変数名が同じでも構いません。

public String testquerystr(@RequestParam("fruit") String fruit, @RequestParam("animal") String animal)

上の@RequestParamの使い方だと、URLのクエリストリングで"animal"や"fruit"の指定が必須です。指定しないと、エラーになります(恐らく、ブラウザに「Whitelabel Error Page」と表示されます)。

指定しなくてもエラーが出ないようにするには、@RequestParamの引数に"required = false"を指定する必要があります。

public String testquerystr(@RequestParam(required = false) String fruit, @RequestParam(required = false) String animal)

また、クエリストリングのデフォルト値を指定したい場合、@RequestParamの引数にdefaultValueを使います。
下のtestquerystrメソッドは、クエリストリングに"fruit"と"animal"がなかったら、変数fruitには"peach"、変数animalには"犬"が入ります。

public String testquerystr(@RequestParam(defaultValue = "peach") String fruit, @RequestParam(defaultValue = "犬") String animal)

@GetMappingアノテーション
あと、testquerystrメソッドのURLのマッピングは@GetMappingアノテーションを使っています。@GetMappingはGETリクエストのみ受ける事ができ、POSTリクエストはエラーになります。

@RequestMappingアノテーションは、GET・POST関係なくリクエストを受ける事ができますが、GETリクエストのみしか想定していない場合は、@GetMappingを使ったほうが良いと思います。

フロントエンド(HTML)の作成、@ResponseBodyアノテーション

今回は、クライアント側で表示するためのhtmlファイルは必要ありません。
上のHelloControllerクラスのtestquerystrメソッドに@ResponseBodyアノテーションを付与しているため、戻り値の文字列がそのままブラウザに表示されます。

アプリの実行と動作確認

それでは、実際にSpring Bootウェブアプリを起動して、ブラウザで動作確認をします。アプリの起動方法については、こちらのページを参考にしてください。

アプリを起動したら、ブラウザで表示確認をしてみましょう。
HelloControllerクラスのtestquerystrメソッドに@RequestMapping("/testquerystr")アノテーションを付与しましたので、アクセスするurlは「http://localhost:8080/testquerystr?fruit=orange&animal=%E7%8C%AB」です("?"以降のクエリストリングは自由に変更して試してください)。

"fruit is orange"、"animal is 猫"の2行が表示されれば正常に動作しています。
Spring Bootでクエリストリング の動作確認

今回はSpring BootのWebアプリで、HTTPのGETリクエストでのデータの受け渡しについて説明しました。
POSTリクエストについては別ページで説明していますので、そちらを参考にしてください。
【Sprint Boot2】POSTリクエストでクライアント側からサーバサイドへデータ送信

(広告)AmazonでSpring Boot3(バージョン3系)の初心者向け入門書を探す!本でSpring Bootプログラミング開発を体系的に勉強する!

その他のSpring Bootの記事

Spring Boot2で日記投稿ウェブアプリ開発入門トップページ
Spring Bootでシンプルな日記投稿ウェブアプリの開発しながら、入門者・初心者にもわかりやすいように説明しています。DBを使用して、新規投稿、編集、削除、一覧表示という基本的なCRUD機能を備えたアプリです。