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

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

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

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

Spring Boot

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

Q&A

解決済

1回答

377閲覧

Spring Tool Suite 4 で未実装のメソッドを知る方法

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2022/06/14 02:36

編集2022/06/14 04:56

Spring Tool Suite 4 を使ってSpringBootの開発をしています

interfaceで指定されたメソッドを未実装のまま、https://127.0.0.1 にアクセスしたところ 502 Bad Gateway エラーが発生しました

最初原因がわからなかったのですが、調べてみたところ

java

1@Repository 2public interface UserRepository extends JpaRepository<User, String>{ 3 Optional<User> findById(String id); 4 List<User> getAll(); 5}

getAll(); というメソッドの実装を忘れていることに気が付きました

編集中も実行時もエラーや警告が発生しない状態だったので、気づくことができませんでした

「問題」というウィンドウには、いろいろな細かな警告が表示されていますが、上記の getAll() に関するものは記載がありません

より大きな規模の開発となると「原因を突き止められないのでは…」という不安がよぎりました

エラーや警告が発生しない原因とか何かあるでしょうか?
あるいは事前にチェックする方法はあるでしょうか?

よろしくお願いします

【追記】
「問題」とは Alt+Shift+Q,X で表示されるものです
イメージ説明

絶対に存在しないだろうと思われる名前にしても同じ状況(エラーがなく、502エラー)が発生します
イメージ説明
コメントアウトすると正常に表示されるようになります。

初期のタイトルにSpringBootとしていたのですが、使用しているのは Spring Tool Suite 4 です。訂正いたします。

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

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

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

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

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

jimbe

2022/06/14 03:30 編集

『「問題」というウィンドウ』とは何のことでしょうか。 interface を implements しているクラスにメソッドが足りなければ、普通にコンパイルエラーが発生します。 コンパイルエラーが発生しないとすれば、実装が既にあるということです。 自身で実装していなくても、そのクラスが何かを extends していてそちらに getAll メソッドがある場合も考えられます。 また、フレームワークとしてインターフェースからクラスを自動生成する等の機能で通常の java としての intarface の使い方と異なる状態になることも考えうると思います。 お使いのクラス等が何の為に何をどうしているのか、きちんと把握してコードを書く必要があるのはどのような場合でも同じではないでしょうか。
guest

回答1

0

ベストアンサー

テストで問題は判明するので、不安にならなくて大丈夫だと思います。経験上、大規模になればなるほどテストの比重は大きかったので、単体テストや結合テストで問題は解決できます。

より大きな規模の開発となると「原因を突き止められないのでは…」という不安がよぎりました

getAll()が完全に未実装の場合は、(特別なことをしていなければ)Spring Boot起動時にエラーが出るので、こちらでも原因が分かると思います。

それとソースコードですが、getAllに相当する「findAll()」がJpaRepositoryにあるので、定義不要です。

java

1// 省略可能 @Repository 2public interface UserRepository extends JpaRepository<User, String>{ 3 // 省略可能 Optional<User> findById(String id); 4 // 省略可能 List<User> getAll(); 5}

また、JpaRepositoryの実装クラスである「SimpleJpaRepository」にアノテーションがあるので「@Repository」は省略できます。公式のチュートリアルでも、省略してたりします。

以下は、設計の話になるのですが、サービスクラスを作成すると責務が分離する(何が使えるか明確になる)ので、お勧めです。こちらを使えば、より不安は少なくなると思います。

java

1@Service 2public class UserService { 3 private final UserRepository userRepository; 4 5 public UserService(UserRepository userRepository) { 6 this.userRepository = userRepository; 7 } 8 9 public Optional<User> findById(String id) { 10 return userRepository.findById(id); 11 } 12 13 public List<User> findAll() { 14 return userRepository.findAll(); 15 } 16}

投稿2022/06/14 10:32

編集2022/06/14 13:14
KT001

総合スコア618

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

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

退会済みユーザー

退会済みユーザー

2022/06/15 13:52

ありがとうございます。 テストで発見されるということでちょっと安心しました。 findAll()など実装済みのコードもありますね。実装コードを探すに苦労したりしますが、マニュアルなどを読むようにして運用するようにします。 サービスクラスの概念はまだ理解が足りないところなので、これから学んでいきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問