質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

javaでのjsonのやり取りについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 109

score 2

たびたびの質問ですが、よろしくお願いいたします。
現在参考書を参考にjavaコード練習をしているのですが、よくわからない点があります。

コード
<form name="LoginForm" id="LoginForm" method="post" action="#">
            User name:<input type="text" name="userName" />
            Password :<input type="password" name="password">
            <button type="submit">Login</button>
         </form>


こちらのformタグから送信した際にjavacontrollerに記述した

コード
@ResponseBody
    @PostMapping("/api/login")
    public String loginApi(@RequestBody LoginForm form) {
        List<User> users=userRepos.findByUserNameAndPassword(form.getUserName(), form.getPassword());

        LoginDto dto=new LoginDto(0,null,null,"ゲスト");
        if(users.size() > 0) {
            dto=new LoginDto(users.get(0));
        }
        return gson.toJson(dto);
    }


こちらのコードに値が送信されてgsonを使って?jsファイルにjavaのデータを送っています。

コード
$.ajax({
        type: 'POST',
        url: '/ecsite/api/login',
        data:JSON.stringify(jsonString),
        contentType: 'application/json',
        datatype: 'json',
        scriptCharset: 'utf-8'
    })


そしてjsonでここのコードでjavaから送られてきた値をjsonを使って?受け取っていると思います。

質問の内容ですが
1.formタグのactionで#を記載しているのになぜ/api/loginが処理を担当することになったのでしょうか?action="/api/loginと書いてあるなら理解できますが、どうして#で処理が渡されるのか理解できません。
2.ajax.gson.jsonこのあたりの意味も検索したりしましたがいまいちよく理解できておりませんので簡潔に教えていただけるとありがたいです。
3.jsonのデータというのは何を表しているのでしょうか?

ながい文章で申し訳ありません。
回答いただけると助かります。
宜しくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ソースコードに省略が多く、詳しいことは分かりませんが、恐らく、ご質問にあるコードの動きを正しく理解されていないように思えます。
そのプログラムは、

  1. ブラウザで入力したformの内容を、JSON形式でControllerに渡す(これをJavascriptのajaxメソッドで行っている)
  2. これを受け取ったControllerが、入力されたユーザー名・パスワードのユーザーの情報を(Javaオブジェクトで)生成する
  3. これをGSONでJSON形式に変換し、ブラウザ側に返す

ということを行っています。

1.formタグのactionで#を記載しているのになぜ/api/loginが処理を担当することになったのでしょうか?action="/api/loginと書いてあるなら理解できますが、どうして#で処理が渡されるのか理解できません。

action="#"のときは、このままだとPOSTリクエストは外部には送信されません(よってControllerには処理が渡らない)。
そのコードでは、その代わりにJavascriptのコードのajaxメソッドで送信しているように見えます。

2.ajax.gson.jsonこのあたりの意味も検索したりしましたがいまいちよく理解できておりませんので簡潔に教えていただけるとありがたいです。
3.jsonのデータというのは何を表しているのでしょうか?

「簡潔に」説明したとしてあなたが理解できるのか分かりませんが、(インターネットで調べると、十分に詳しい説明は出てくると思うので。)

ajax

「非同期通信」のことです。非同期通信というのは、Webの世界で言うと、画面遷移をしないで(ページ全体を読み込むことなしに)データの送受信を行うことです。
form要素でaction="○○"の○○の部分にURLを指定すると、データを送信した後にその画面に遷移します(どういう画面に遷移するかという情報をControllerが渡すことになります)が、今回は、同じ画面にとどまったまま、フォームの内容を送信しています。

gson

JSON形式の文字列とJavaのオブジェクトを相互変換する機能(ライブラリ)です。今回は、恐らくreturn gson.toJson(dto);の部分で、JavaのオブジェクトをJSON形式に変換しています。

json

項目の名前と項目の中身をセットで書くことが出来る書式です。「何を表しているか」は、JSON形式で書かれている内容次第ということになります。
今回は、恐らく

{
    “userName” : “hoge”,
    “password” : “fuga”,
}


というようなデータがControllerに渡されているのだと思われます。

上記の説明で理解できないということでしたら、恐らくあなたに必要なのは「簡潔な」説明ではなく、「初心者にもよくわかる懇切丁寧な説明」だと思います。
具体的に「どのページを見て」「どの部分が」分からなかったかを書いていただいた方がよいのではないでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/06/13 23:13

    ありがとうございます。
    参考にコードを何度も読み返し、ある程度理解することができました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る