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

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

新規登録して質問してみよう
ただいま回答率
85.46%
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回答

1783閲覧

【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 02:04

編集2021/05/02 05:23

■解決したいこと
@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ページで確認できます。

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

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

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

m.ts10806

2021/05/02 02:38

なにをもって「できない」と判断されてますか?
m.ts10806

2021/05/02 02:40

それに、「Ajaxによって何の処理をして何を返して返された結果をどうしたいのか」によっても「正解」は違います
homareendo

2021/05/02 02:56

m.ts10806様 ご返信ありがとうございます。今後質問をするうえで気を付けるポイントについてもご指摘いただき感謝します! 「できない」の判断基準は以下の通りです。 getリクエストの通信先であるコントローラのgetPage2メソッドに処理が移行しない ※デバッグを使って確認 ajaxによる処理の目的、期待する結果に関しては以下の通りです 目的→コントローラへの通信(コントローラに通信できるという確認をしたい) 期待する結果→jsからコントローラへ通信が出来ればよく、結果に関しては何でもよい
homareendo

2021/05/02 03:01

上記内容を踏まえたうえで 該当するメソッドにリクエストが送られない原因としては何が考えられるでしょうか?
m.ts10806

2021/05/02 03:19

質問は編集できますので、内容調整してください。 あと、JavaScriptのコードだけではそもそも$.getが実行されているかどうかすら判断できません。 HTML、JavaScript 可能ならCSSも提示されたほうが良いと思います。 他者がコピペで現象再現できるコードですね。
m.ts10806

2021/05/02 03:23

URLってform送信のときのaction属性の属性値と役割はイコールなので あとはマッピングが出来ているかと、正しくリクエストが送られる実装、操作をしているか のみです。
homareendo

2021/05/02 03:32

teratailでいくつかご質問したことはあるのですが、 質問内容にたいする回答だけでなく 原因を特定するためのプロセスまで示していただいたのは初めてでした。勉強になります。 以下内容の確認、実施を行い、結果を踏まえて質問内容を編集します。 ・コントローラの@RequestMappingが正しく設定できているか ・$.getが実行されているか、リクエストが送られているか
m.ts10806

2021/05/02 03:37

回答ではなくあくまで質問への追記修正依頼です。 「考え方」を聞いているものならともかく、明確なものであれば(質問内容がよほど雑でなければ)、ふわっとした不明確なアドバイスは避けたいですしね。
guest

回答1

0

@RequestMappingconsumesを使って、Content-Typeを明示すると改善するかもしれません。
https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

例えば、AjaxリクエストのAcceptヘッダがapplication/jsonなら、コントローラ側は↓こんな感じだと思います。

java

1@RequestMapping(value = "/test2", consumes=MediaType.APPLICATION_JSON_VALUE) 2public ModelAndView getPage2() {

[追記]
すみません、的外れだったかもしれません。

jQuery 3.6.0で試したところ、

javascript

1$(function(){ 2 $.get('http://localhost:8080/sample/sample/test2') 3 ... 4}

↑このときのAcceptヘッダの値は*/*でした。
なので、consumes無しでも、少なくともgetPage2()は呼ばれるはず
という気がします(そのあと、ちゃんとレスポンスが返せるかどうかは別問題)。

ひょっとして、AjaxのURLが間違ってるなんてことはないですか?
http://localhost:8080/sample/test2だったりしません?

投稿2021/05/02 03:30

編集2021/05/02 13:50
gpsoft

総合スコア1323

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

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

homareendo

2021/05/02 03:33 編集

ご返信ありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問