次回は、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なども試してみたいと思います。