Springの404・405・415エラー原因と対処法まとめ!NoHandlerFoundまで完全解説
Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。
Spring Boot 3 プログラミング入門をAmazonで見る※ Amazon広告リンク
生徒
「Spring Bootアプリで突然『404 Not Found』って出て困ってます。何が原因なんでしょうか?」
先生
「それは典型的なHTTPエラーの一つですね。SpringではリクエストURLに対するハンドラが見つからないと404が発生しますよ。」
生徒
「他にも『405 Method Not Allowed』や『415 Unsupported Media Type』が出ることもあって…対処方法が知りたいです!」
先生
「よし、ではSpringでよく出る標準エラーの原因と対処法を総点検してみましょう。」
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メソッドに対応したアノテーションを必ず使いましょう。
Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。
Spring Framework超入門をAmazonで見る※ Amazon広告リンク
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の標準エラーは例外ではないことに注意
例えば404や405などのHTTPエラーは、Javaでいう例外(Exception)とは少し異なり、Springが内部で処理している状態コードによる応答です。明示的に例外がスローされるわけではなく、ハンドリングされていないURLや不正なメソッドに対する反応です。
そのため、@ExceptionHandlerでキャッチするには、BasicErrorControllerの動作をオーバーライドしたり、HandlerExceptionResolverを使って制御する必要があります。
8. エラーを防ぐためのチェックリスト
最後に、Spring Bootアプリでよくある標準エラーを防ぐためのチェックリストをまとめます。
- URLパスと
@RequestMappingの整合性を確認 - HTTPメソッド(GET/POST/PUTなど)を正確に対応
@RequestBodyの付け忘れに注意application.propertiesの設定を見直す- 静的ファイルやテンプレートのパスミスに注意
- 独自エラー画面を整備しUX改善