Springの404・405・415エラー原因と対処法まとめ!NoHandlerFoundまで完全解説
生徒
「Spring Bootアプリで突然『404 Not Found』って出て困ってます。何が原因なんでしょうか?」
先生
「それは典型的なHTTPエラーの一つですね。SpringではリクエストURLに対するハンドラが見つからないと404が発生しますよ。」
生徒
「他にも『405 Method Not Allowed』や『415 Unsupported Media Type』が出ることもあって…対処方法が知りたいです!」
先生
「よし、ではSpringでよく出る標準エラーの原因と対処法を総点検してみましょう。」
1. Spring Bootでよく見るHTTPエラーとは?
「1. Spring Bootでよく見るHTTPエラーとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
Spring Bootを使ったWebアプリケーションでは、HTTPステータスコードに応じて様々なエラーが発生します。代表的なものとして、404 Not Found、405 Method Not Allowed、415 Unsupported Media Typeなどがあります。
これらのエラーはフロントエンドからバックエンドに正しくリクエストが届いていない、もしくはSpring側で処理対象が定義されていないことを意味します。
2. 404 Not Found の原因と解決方法
404エラーは、SpringがそのURLに対応するコントローラのメソッド(ハンドラ)を見つけられなかった場合に発生します。
- URLのパスが間違っている
- メソッドに
@GetMappingなどが正しく設定されていない - Spring MVCの設定で静的リソースとの競合がある
また、Spring Bootではapplication.propertiesで以下の設定を入れることで、NoHandlerFoundExceptionを捕捉できます。
spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false
3. 405 Method Not Allowed の原因と対処
このエラーはリクエストのHTTPメソッドが間違っているときに出ます。
- 例:
@GetMappingしかないのに、POSTでリクエストしている - フロントエンドで送るメソッドの種類が違う(例:fetchでGET送信するつもりがPOSTに)
Java側での正しい指定例:
@Controller
public class UserController {
@PostMapping("/register")
public String register(UserForm form) {
return "success";
}
}
このように、受け取るHTTPメソッドに対応したアノテーションを必ず使いましょう。
4. 415 Unsupported Media Type の原因と対処
「4. 415 Unsupported Media Type の原因と対処」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
415エラーは、リクエストのContent-TypeにSpring側が対応できない場合に発生します。
application/jsonを送っているのに、Java側で@RequestBodyが付いていない- 受け取るクラスにJacksonでパース可能な構造になっていない
例として、以下のように書くことでJSONを受け取ることができます:
@PostMapping(value = "/api", consumes = "application/json")
public ResponseEntity<String> receive(@RequestBody MyRequest request) {
return ResponseEntity.ok("OK");
}
5. NoHandlerFoundException をキャッチして独自エラー画面を表示
Springでは、コントローラが見つからない場合、通常はBasicErrorControllerによってエラー画面が表示されます。しかし設定次第でNoHandlerFoundExceptionをキャッチして独自処理に変更できます。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NoHandlerFoundException.class)
public String handle404(NoHandlerFoundException e) {
return "error/404";
}
}
また、application.propertiesで例外を投げる設定も必要です。
spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false
6. 独自のエラーページを作ってUX改善
初心者がよく困るのが、真っ白なエラーページ。これを改善するには、resources/templates/error/配下にカスタムのHTMLテンプレートを配置しましょう。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>ページが見つかりません</title>
</head>
<body>
<h1>404 Not Found</h1>
<p>お探しのページは見つかりませんでした。</p>
</body>
</html>
このように、ユーザー向けのエラーページを丁寧に用意することで、Webアプリの信頼性やユーザビリティが向上します。
7. Springの標準エラーは例外ではないことに注意
「7. Springの標準エラーは例外ではないことに注意」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
例えば404や405などのHTTPエラーは、Javaでいう例外(Exception)とは少し異なり、Springが内部で処理している状態コードによる応答です。明示的に例外がスローされるわけではなく、ハンドリングされていないURLや不正なメソッドに対する反応です。
そのため、@ExceptionHandlerでキャッチするには、BasicErrorControllerの動作をオーバーライドしたり、HandlerExceptionResolverを使って制御する必要があります。
8. エラーを防ぐためのチェックリスト
最後に、Spring Bootアプリでよくある標準エラーを防ぐためのチェックリストをまとめます。
- URLパスと
@RequestMappingの整合性を確認 - HTTPメソッド(GET/POST/PUTなど)を正確に対応
@RequestBodyの付け忘れに注意application.propertiesの設定を見直す- 静的ファイルやテンプレートのパスミスに注意
- 独自エラー画面を整備しUX改善
まとめ
ここまで、Spring Bootで発生しやすい代表的なHTTPエラーである404エラー、405エラー、415エラーの原因と対処方法について詳しく解説してきました。Spring Bootを利用したWebアプリケーション開発では、これらのエラーは非常に頻繁に発生します。特にJava初心者やSpring初心者が最初につまずきやすいポイントとして、URLの設定ミス、HTTPメソッドの不一致、リクエストのContentTypeの設定ミスなどが挙げられます。
まず404エラーは、Spring MVCが指定されたURLに対応するコントローラのハンドラメソッドを見つけることができなかった場合に発生します。つまり、ブラウザやフロントエンドから送信されたURLと、Spring BootのControllerに定義されているRequestMappingやGetMapping、PostMappingなどのマッピング設定が一致していない場合に表示されるエラーです。Spring BootでWebアプリケーションを作成する際には、URLパスの設計を整理し、Controller側のアノテーション設定を正確に行うことが重要です。
次に405エラーは、HTTPメソッドが一致していない場合に発生します。例えばController側ではGetMappingで定義しているのに、フロントエンドからPOSTメソッドでリクエストが送信された場合などに表示されます。Spring BootではREST APIを構築するケースが多いため、HTTPメソッドの設計はとても重要な要素になります。GET、POST、PUT、DELETEなどのメソッドの役割を理解し、フロントエンドとバックエンドで通信仕様を統一することで405エラーを防ぐことができます。
さらに415エラーは、送信されたデータ形式とSpring側が受け取れるデータ形式が一致していない場合に発生します。特にJSONデータを扱うREST API開発では頻繁に発生するエラーの一つです。Spring BootではJacksonライブラリによってJSONデータをJavaオブジェクトに自動変換しますが、RequestBodyアノテーションが付いていない場合やContentTypeが正しく設定されていない場合にはデータを受信することができません。そのためAPI開発ではJSON構造とJavaクラスの設計を一致させることが大切です。
またSpring Bootには標準のエラーハンドリング機能としてBasicErrorControllerが存在し、エラーが発生した場合には自動的にエラーページが表示されます。しかし実際のWebアプリケーションでは、ユーザーにとって分かりやすい独自エラーページを用意することが推奨されます。例えば404専用ページを作成し、トップページへのリンクや検索機能を設置することでユーザー体験を改善することができます。
Spring Bootでより高度なエラー処理を実装する場合にはControllerAdviceを利用した例外処理が有効です。ControllerAdviceを使用するとアプリケーション全体の例外を一括で管理できるため、ログ管理やエラーメッセージの統一を行うことができます。大規模なシステム開発ではこのような例外処理の設計がシステムの保守性や信頼性に大きく影響します。
さらにapplicationpropertiesの設定を変更することでSpring Bootのエラー処理の動作を細かく制御することも可能です。例えばNoHandlerFoundExceptionを有効化する設定を行うことで、存在しないURLへのアクセスを例外として処理できるようになります。このような設定を理解しておくことで、Spring Bootアプリケーションのエラーハンドリングをより柔軟に設計することができます。
Webアプリケーション開発ではエラーを完全になくすことは難しいですが、エラーの仕組みを理解しておくことで問題解決のスピードが大きく向上します。Spring BootのHTTPエラーの理解はJavaバックエンドエンジニアとして非常に重要な基礎知識です。URL設計、HTTPメソッド設計、JSON通信設計、例外処理設計を体系的に学ぶことで、より実践的で安定したWebアプリケーションを構築できるようになります。
サンプルプログラムで理解するSpringエラー対策
次にSpring Bootでエラーを防ぐための基本的なControllerのサンプルコードを確認してみましょう。URLマッピング、HTTPメソッド、JSON受信設定を正しく定義することで404エラー、405エラー、415エラーの多くを防ぐことができます。
@RestController
@RequestMapping("/api/users")
public class UserApiController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return "ユーザー情報取得";
}
@PostMapping(consumes = "application/json")
public String createUser(@RequestBody UserRequest request) {
return "ユーザー作成成功";
}
}
このようにSpring BootではControllerのマッピング設定を明確にすることでURLエラーを防ぎ、HTTPメソッドを適切に指定することで通信エラーを回避できます。さらにJSON受信の設定を正しく行うことでデータ処理の問題を減らすことができます。
ユーザー情報取得
ユーザー作成成功
また独自のエラーページを用意することで、ユーザーがエラー画面に遭遇した場合でも分かりやすい案内を表示することができます。Spring Bootではテンプレートエンジンを利用してエラー画面を作成することが一般的です。
<!DOCTYPE html>
<html>
<head>
<title>エラーページ</title>
</head>
<body>
<h1>404ページ</h1>
<p>指定されたページは存在しません。トップページから再度アクセスしてください。</p>
</body>
</html>
このようにSpring Bootのエラー処理を正しく理解することで、安定したWebアプリケーション開発を行うことができます。HTTPエラーの理解はREST API開発やバックエンド開発において非常に重要な知識であり、実務でも頻繁に役立つスキルです。
生徒
今日の学習でSpring Bootの404エラーや405エラー、415エラーの違いがかなり理解できました。エラーが出る理由が少しずつ見えてきました。
先生
それはとても良いですね。Spring BootのWebアプリケーションではHTTPエラーの理解が重要です。エラーの意味が分かれば原因を見つけやすくなります。
生徒
404エラーはURLが見つからないとき、405エラーはHTTPメソッドが違うとき、415エラーはデータ形式が合っていないときでしたよね。
先生
その通りです。さらにSpring BootではControllerのマッピング設定やJSON受信設定を正しく行うことで多くの問題を防ぐことができます。
生徒
エラーが出たときはURL設定、HTTPメソッド、JSON構造を順番に確認すると原因が見つかりやすいですね。
先生
その確認方法はとても良い習慣です。Spring Boot開発ではログ確認、URL確認、HTTPメソッド確認、JSON構造確認を順番にチェックすると多くの問題を解決できます。これからも実際にコードを書きながら理解を深めていきましょう。