ポンコツPdM

プロフィール画像

独立系のSIerに務めるSE,PM。 仕事の上で得たIT関連やプロジェクト運営関連の知識を書きます。 使用技術:Java,ウェブ関連全般,データベース全般 (どれも広く浅く)

Spring BootのFormクラスとDTOの違いを解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でクラスの役割分担を学ぶイラスト。

設計・テスト・レビュー

2026/9/6

Spring BootのFormクラスとDTOの違いは?混ぜると困る理由を解説

AIによる要約Formクラスは画面やリクエストから入力値を受け取るためのクラス、DTOは層の間でデータを受け渡すためのクラスとして使われます。現場では名前だけでなく、どの層の都合を表すクラスなのかを分けることが重要です。 Spring Bootの業務システムでは、Form、DTO、Entityのような値を入れるクラスがたくさん出てきます。 初学者にとっては、どれもフィールドとgetter/setterを持つ似たクラスに見えます。しかし、現場では役割を混ぜると後から修正しづらくなります。 この記事のポイント ...

Spring Bootの@ModelAttributeとFormに値が入る仕組みを解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でフォーム連携を学ぶイラスト。

実装・エラー解決

2026/9/6

Spring Bootの@ModelAttributeとは?Formに値が入る仕組みと使い方

AIによる要約@ModelAttributeは、リクエストパラメータをFormクラスへ詰めたり、画面へ渡すモデル属性として扱ったりするために使われます。Thymeleafのフォームでは、Form名、フィールド名、Controllerの引数名がずれると値が入らない原因になります。 Spring MVCの画面フォームを触ると、@ModelAttributeというアノテーションが出てきます。 サンプルでは何となく動きますが、現場で入力値が入らない、エラー時に画面へ戻れない、初期表示でFormがない、という問題が ...

BindingResultの使い方と@Validの直後に置く理由を解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間で入力チェック結果を学ぶイラスト。

実装・エラー解決

2026/9/6

BindingResultの使い方と注意点|@Validの直後に置く理由

AIによる要約BindingResultは、@Validで検出した入力エラーをControllerで受け取るための引数です。重要なのは、@Validを付けたFormの直後に置くことです。順番を間違えると、期待通りにエラー処理できません。 Spring MVCで入力チェックを実装すると、@Validと一緒にBindingResultが出てきます。 新人のうちは、サンプルコードを写して動かすことはできても、なぜその順番で書くのかまでは分かりにくいです。この記事では、現場でよくレビューされる注意点に絞って整理し ...

@RequestParamが多すぎる時のController引数整理を解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間で検索条件のまとめ方を学ぶイラスト。

設計・テスト・レビュー

2026/9/6

@RequestParamが多すぎる時はどうする?Controller引数の整理方法

AIによる要約@RequestParamが増えすぎたControllerは、読みづらく、修正漏れも起きやすくなります。検索条件や入力項目がひとまとまりなら、Formクラスや検索条件クラスへまとめることを検討します。ただし、何でもまとめればよいわけではなく、関連する値だけをまとめるのが大事です。 検索画面や一覧画面を作っていると、Controllerの引数に@RequestParamがどんどん増えることがあります。 最初は2個だった条件が、名前、ステータス、日付範囲、担当者、ページ番号と増えていき、気づくと ...

Spring Bootの入力チェックをどこでやるかを解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でControllerとServiceの役割を学ぶイラスト。

設計・テスト・レビュー

2026/9/6

Spring Bootの入力チェックはどこでやる?ControllerとServiceの役割

AIによる要約入力チェックは、すべてControllerでif文を書くものではありません。必須、桁数、形式のようなチェックはFormやRequest DTOのBean Validationに寄せ、重複確認、権限、状態遷移のような業務ルールはServiceで判断する、と分けると現場コードが読みやすくなります。 Spring Bootで登録画面やAPIを作ると、入力チェックをどこに書くかで迷います。 Controllerで全部if文を書く、Formのアノテーションだけに任せる、Serviceでまとめて見るなど ...

Spring Bootの@RequestBodyでJSONを受け取る使い方を解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でAPI入力を学ぶイラスト。

実装・エラー解決

2026/9/6

Spring Bootの@RequestBodyとは?JSONを受け取る使い方と注意点

AIによる要約@RequestBodyは、HTTPリクエストのボディに入っているJSONをJavaオブジェクトへ変換して受け取るために使います。クエリ文字列やHTMLフォームを受けるためのものではありません。APIの入口ではRequest DTOとセットで考えると安全です。 Spring BootでAPIを作ると、@RequestBodyがよく出てきます。 画面フォーム中心の開発から入った人は、@RequestParamやFormクラスとの違いが分からず、JSONがnullになる、400エラーになる、とい ...

Spring BootのServiceに業務ロジックを書く理由を解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でServiceの責務を学ぶイラスト。

設計・テスト・レビュー

2026/9/6

Spring BootのServiceに業務ロジックを書く理由

AIによる要約Spring BootのServiceは、業務処理やユースケースを表す中心的な場所です。Controllerに業務ロジックを書くと入口ごとに処理が散らばります。Serviceに寄せることで、再利用しやすく、テストしやすく、トランザクション境界も考えやすくなります。 Spring Bootの現場でよく言われるのが「業務ロジックはServiceに書きましょう」という話です。 ただ、初学者にとっては、Controllerに書いても動くのに、なぜServiceへ移す必要があるのか分かりにくいかもしれ ...

設計・テスト・レビュー

2026/9/6

Spring Bootの@Transactionalはどこに付ける?

AIによる要約Spring Bootの@Transactionalは、基本的にRepositoryではなく、業務処理のまとまりを表すServiceメソッドに付けることが多いです。どこからどこまでを1つの更新単位にするかを決めるためのアノテーションであり、何となく付けるものではありません。 Spring BootでDB更新を扱うと、@Transactionalというアノテーションが出てきます。 初学者は、とりあえずRepositoryや更新メソッドに付ければよいと考えがちですが、現場では「どこからどこまでを ...

Spring BootのDTO変換はどこでやるべきかを解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でDTOとEntityの変換を学ぶイラスト。

設計・テスト・レビュー

2026/9/6

Spring BootのDTO変換はどこでやるべきか

AIによる要約Spring BootのDTO変換は、必ずController、必ずServiceと決まるものではありません。大事なのは、Entityを外へ直接出さず、画面/API用の形に変換することです。単純な変換はControllerやService、複雑な変換はMapperへ分けると読みやすくなります。 Spring Bootの現場では、Entityをそのまま画面やAPIに返さず、DTOへ変換することが多いです。 しかし、DTO変換をどこに書くかは初学者が迷いやすいポイントです。Controllerに ...

Spring BootのRepositoryでよくある戻り値の扱いを解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間でOptionalやListを学ぶイラスト。

実装・エラー解決

2026/9/6

Spring BootのRepositoryでよくある戻り値の扱い

AIによる要約Spring BootのRepositoryでは、Optional、List、単一Entityなど戻り値の扱いでレビューされることがあります。大事なのは、0件、1件、複数件を想定し、get()で雑に取り出さないことです。検索条件不足もあわせて確認します。 Spring Data JPAを使うと、Repositoryのメソッドを簡単に作れます。findByIdやfindByEmailのようなメソッド名だけで検索できるため便利です。 一方で、戻り値の扱いを雑にすると、NoSuchElementE ...