Java Spring Boot JSON 送受信③~JSONでリクエストを送る~

次回は、JavaからJSONを受け取りHTMLで表示を行いました。今回は、クライアントの入力情報をJSON形式でJava側へ送り、DBに値を登録する。を実装していきます。

前回の記事はこちら↓

スポンサーリンク

index.htmlに追記

index.htmlに下記入力フォーマットのコードを追記します。パラメータ受け渡しの時にはformを多用しておりましたが、formは使用しておりません。POST通信の設定や値の受け渡しにかかわる処理はJSで書いていきます。

<h1>入力データをJSON送信します</h1>
	<p>
		ユーザー名:<input type="text" id="userName" name="userName">
	</p>
	<p>
		パスワード:<input type="password" id="password" name="password">
	</p>
	<p>
		有効フラグ:<select name="enabled" id="enabled">
			<option value="true">true</option>
			<option value="false">false</option>
		</select>
	</p>
	<p>
		管理者権限:<select name="admin" id="admin">
			<option value="true">true</option>
			<option value="false">false</option>
		</select>
	</p>
	<p>
		<button id="button" type="button">登録</button>
	</p>

JSON送信用のJSを追記

面倒くさいので、そのままHTMLの中に書き込んじゃいます。JSON内容確認のためにalertで一枚かましています。

<script>
$(function(){
	$("#button").click(function(){
		var JSONdata = {
				userName:$("#userName").val(),
				password:$("#password").val(),
				enabled:$("#enabled").val(),
				admin:$("#admin").val()
		};
		alert(JSON.stringify(JSONdata));

		$.ajax({
			type:'POST',
			url:'insert',
			data:JSON.stringify(JSONdata),
			contentType:'application/JSON',
			dataType:'json',
			acriptCharset:'utf-8'
		});
	})
})
</script>

JSON.stringify()でJSONに変換することができます。引数の中には、JSON化したいオブジェクトを入れます。※今回でいうとJSONdataの部分。

ControllerにinsertJSONを受け取るためのメソッド追加

java Controllerで、insert用JSONを受け取るためのメソッドを追記します。
本来であれば、パスワードをBCrypt等でハッシュ化しなければなりませんが、割愛します。

	@RequestMapping(value="/insert",method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
	public String  insert(@RequestBody AccountEntity accountEntity) {
		repository.save(accountEntity);
		return "redirect:/index";
	}

@RequestMapping(consumes=MediaType.APPLICATION_JSON_VALUE)は、JSON形式のリクエストを受け取ります宣言です。

メソッド引数の@RequestBodyも同じく、JSON形式のリクエストを受け取るためのアノテーションとなります。
ちなみに、 @RequestBody を引数に入れていれば consumes=MediaType.APPLICATION_JSON_VALUE を入れなくても読み込みは行えました。

index.htmlをリダイレクトすると、新規登録した内容が一覧tableに表示されます。
今回は、GETとPOSTのHTTPメソッドしか使用しておりませんが、PUTやDELETEなども試してみたいと思います。

タイトルとURLをコピーしました