🔴 The Error You're Seeing

Confirm this matches your console output. If it does, you're in the right place.

ERROR LOG2026-02-14 11:30:45.001 WARN 8842 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]

⚡ Quick Fix Works 80% of the time

Change the @GetMapping annotation to @PostMapping on your controller method.

@PostMapping("/users") public ResponseEntity<?> createUser(@RequestBody UserRequest request) { ... }

🧠 Why this Happens

Tap to expand the deep technical explanation

The client sent an HTTP request using a specific verb (like POST, PUT, DELETE), but the corresponding controller method mapping only allows a different verb (like GET). Spring refuses to process the request because the action is not allowed on that specific URL.

The HITEC City Parking Spot Analogy:

It is like pushing a door that says 'Pull'. The door (endpoint) exists, but you are using the wrong physical action (HTTP method) to interact with it.

🔁 How to Reproduce Confirm this is your error

Send a POST request to a controller method annotated with @GetMapping. The API returns 405 Method Not Allowed with Request method 'POST' not supported.

🛠️ Solutions (3 Ways to Fix)

Solution 1✓ Most common cause

Match the mapping annotation to the HTTP verb

👉 Use this when the client is sending the correct HTTP method, but your controller is mapped to a different one.

If you are creating data, use @PostMapping. If you are reading, use @GetMapping. Ensure the annotation matches the request.

// Change this: // @GetMapping("/users") // To this: @PostMapping("/users") public ResponseEntity<?> createUser(@RequestBody UserRequest request) { ... }
Solution 2

Fix the URL path in the client request

👉 Use this if you are hitting the wrong URL, which causes Spring to match a different method that doesn't support your HTTP verb.

Sometimes a typo in the URL (e.g., /user instead of /users) routes the request to a different controller that only has a GET method, resulting in a 405.

// Ensure client URL matches server path exactly // Client: POST http://localhost:8080/api/users // Server: @PostMapping("/api/users")
Solution 3

Handle the exception globally

👉 Use this to return a clean JSON error instead of Spring's default 405 HTML response.

Create a global exception handler to catch HttpRequestMethodNotSupportedException.

@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public ResponseEntity<String> handleMethodNotSupported(HttpRequestMethodNotSupportedException ex) { return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body("HTTP method " + ex.getMethod() + " is not supported for this endpoint."); } }

📋 Version Notes

Spring Boot 2.x

Returns 405 status with default error page.

Spring Boot 3.x

Returns 405 status, RFC 7807 ProblemDetail by default.

🛡️ How to Prevent This Next Time

Follow REST conventions strictly: GET for reading, POST for creating, PUT/PATCH for updating, DELETE for deleting.