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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

4174閲覧

【SpringBoot】@Controllerに対してajax通信を行うがコントローラクラスの該当メソッドに処理が移行しない

homareendo

総合スコア9

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/05/02 08:52

■解決したいこと
@Controllerを付与したコントローラクラスのメソッドに対してajax通信のgetリクエストを行うが
該当のメソッドが実行されない
(※デバッグで確認済み)

■行った手順
・コントローラクラスの作成
・@RequestMappingで受け取るURLを設定する
・javascriptファイル内でコントローラクラス内のメソッドに対しgetリクエストを行うよう記述
(testPageController)

package com.example.demo.web.sample.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @RequestMapping(value = "/sample") @Controller public class TestPageController { @RequestMapping(value = "/test2") public String getPage2() { return "成功しました"; } }

(test.js)

$(function() {  $.get('http://localhost:8080/sample/sample/test2')   .done(function(data) { alert(data); }); })

(test.html)※

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"> <head> <!-- jquery --> <script src="https://code.jquery.com/jquery-3.3.1.js"></script> <script type="text/javascript" th:src="@{/js/sample/test.js}"></script> </head> <body> <p>テスト</p> </body> </html>

※cssファイルはなし

■試したこと
1 URLがマッピングされていない?
→URLを直接ブラウザに入力すると該当のメソッドにリクエストが送られることを確認(デバッグモードで確認)

2 jsファイルは動いている?
→chromの開発ツールを使って確認。$.getの処理が実行されていることは確認されたが、.doneには処理が移行していないためサーバ側へのリクエストが失敗していると考えられる

3 @RequestMappingのconsumesを使って、Content-Typeを明示してみる
→AjaxリクエストのAcceptヘッダの確認方法が分からず未実施

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yushi_koga

2021/05/02 14:41 編集

過去に関連している質問をされているようですね。 元の質問を編集するか、過去にこの質問に関連した質問をしたことがあることを明示したほうが良いと思いますよ https://teratail.com/questions/336189 でなければ、低評価がついてしまうかと思います。
guest

回答1

0

1 URLがマッピングされていない?
→URLを直接ブラウザに入力すると該当のメソッドにリクエストが送られることを確認(デバッグモードで確認)

この書き方だと、エントリポイントはhttp://localhost:8080/sample/sample/test2ではなくhttp://localhost:8080/sample/test2になるはずです。
仮にhttp://localhost:8080/sample/sample/test2で動作しているのであれば、tomcatのcontext pathの設定を入れている(入れてしまっている)と思われます。
application.propertiesあるいはapplication.ymlといった設定ファイルでserver.servlet.context-path=/sampleと設定してしまっていないか確認したほうが良いでしょう。

また、TestPageController#getPage2のreturnの値からplain/textな返り値を返すことを期待して書いていると推測しましたが、その場合は@Controllerではなく@RestControllerを使うのが一般的です。
仮にこの書き方のまま@Controllerを使う場合は、返したい内容を記載した成功しました.htmlresources/templates配下に配置するか、メソッドに@ResponseBodyを付与する必要があります。

2 jsファイルは動いている?
→chromの開発ツールを使って確認。$.getの処理が実行されていることは確認されたが、.doneには処理が移行していないためサーバ側へのリクエストが失敗していると考えられる

.doneには処理が移行していないサーバ側へのリクエストが失敗していると考えられるとされていますが、どのような手段で確認されたにせよ、サーバとの通信状況を確認するのには開発ツールのネットワークタブが最適かと思います。
ここで、サーバからどのような応答が返ってきているかを確認するのが最も効率的です。
ちなみに$.getが実行されていると判断した理由はなんでしょうか?

3 @RequestMappingのconsumesを使って、Content-Typeを明示してみる
→AjaxリクエストのAcceptヘッダの確認方法が分からず未実施

今回の書き方に関しては、ここは特に関係ありません。

以上のことを踏まえて、現時点(2021/05/02)で最もSpring Bootらしい書き方に変更する修正内容は以下となります。

  1. @Controllerとしている部分を@RestControllerに変更する
  2. context pathの設定を削除する
  3. $.get('http://localhost:8080/sample/sample/test2')としている部分を$.get('http://localhost:8080/sample/test2')に変更する。

投稿2021/05/02 14:26

yushi_koga

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問