Bird
Raised Fist0
Spring Bootframework~10 mins

@PathVariable for URL parameters in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - @PathVariable for URL parameters
Client sends HTTP request with URL
↓
Spring Boot matches URL pattern
↓
Extract @PathVariable from URL
↓
Pass variable to Controller method
↓
Controller processes variable
↓
Return response to client
The flow shows how Spring Boot takes a URL with parameters, extracts those parameters using @PathVariable, and passes them to the controller method to process.
Execution Sample
Spring Boot
  @GetMapping("/users/{id}")
  public String getUser(@PathVariable String id) {
      return "User ID: " + id;
  }
This code maps a GET request with a URL containing an 'id' parameter, extracts it using @PathVariable, and returns it in the response.
Execution Table
StepIncoming URLURL Pattern Matched@PathVariable ExtractedController Method CalledResponse Returned
1/users/42/users/{id}id = "42"getUser("42")"User ID: 42"
2/users/abc/users/{id}id = "abc"getUser("abc")"User ID: abc"
3/users/No matchN/ANo method called404 Not Found
💡 Execution stops when URL does not match pattern or after response is returned.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3
idN/A"42""abc"N/A
Key Moments - 2 Insights
Why does the method not get called when the URL is '/users/'?
Because the URL does not match the pattern '/users/{id}', so Spring Boot does not extract any @PathVariable and does not call the method. See execution_table row 3.
Can @PathVariable extract numbers and letters both?
Yes, @PathVariable extracts the part of the URL as a string regardless of content. See execution_table rows 1 and 2 where '42' and 'abc' are extracted.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'id' at Step 2?
A"42"
B"abc"
Cnull
DNo value
💡 Hint
Check the '@PathVariable Extracted' column in row 2.
At which step does the URL not match the pattern?
AStep 1
BStep 2
CStep 3
DNone
💡 Hint
Look at the 'URL Pattern Matched' column for each step.
If the URL was '/users/123', what would the response be?
A"User ID: 123"
B"User ID: abc"
C404 Not Found
D"User ID: /users/123"
💡 Hint
Refer to how the controller returns 'User ID: ' plus the extracted id.
Concept Snapshot
@PathVariable extracts parts of the URL as method parameters.
Use @GetMapping("/path/{variable}") to define URL patterns.
Spring Boot matches URL and passes the variable to the method.
Variable is always a string unless converted.
If URL does not match, method is not called.
Useful for dynamic URLs like user IDs.
Full Transcript
This visual execution shows how Spring Boot uses @PathVariable to get parts of the URL and pass them to controller methods. When a client sends a URL like '/users/42', Spring Boot matches it to the pattern '/users/{id}', extracts '42' as the id, and calls the method getUser with id='42'. The method returns 'User ID: 42'. If the URL does not match the pattern, like '/users/', the method is not called and a 404 error is returned. This helps create dynamic web endpoints that respond based on URL parameters.

Practice

(1/5)
1. What is the main purpose of the @PathVariable annotation in Spring Boot?
easy
A. To bind form data to a Java object
B. To handle exceptions in controller methods
C. To define a fixed URL mapping for a controller method
D. To extract values from the URL path and pass them as method parameters

Solution

  1. Step 1: Understand the role of @PathVariable

    @PathVariable is used to get dynamic parts of the URL and pass them to method parameters.
  2. Step 2: Compare with other annotations

    Other options like binding form data or exception handling are done by different annotations, not @PathVariable.
  3. Final Answer:

    To extract values from the URL path and pass them as method parameters -> Option D
  4. Quick Check:

    @PathVariable = extract URL values [OK]
Hint: Remember: @PathVariable grabs values directly from URL path [OK]
Common Mistakes:
  • Confusing @PathVariable with @RequestParam
  • Thinking it binds form data
  • Assuming it handles exceptions
2. Which of the following is the correct syntax to use @PathVariable in a Spring Boot controller method to get an id from the URL /user/{id}?
easy
A. @GetMapping("/user/{id}") public String getUser(@PathVariable int id) { ... }
B. @GetMapping("/user") public String getUser(@PathVariable int id) { ... }
C. @GetMapping("/user/{id}") public String getUser(@RequestParam int id) { ... }
D. @GetMapping("/user/{id}") public String getUser(@PathVariable String name) { ... }

Solution

  1. Step 1: Match URL pattern with method parameter

    The URL has {id}, so the method must have @PathVariable int id to match the placeholder.
  2. Step 2: Check annotation and parameter type

    @GetMapping("/user/{id}") public String getUser(@PathVariable int id) { ... } correctly uses @PathVariable with int id and matches the URL pattern.
  3. Final Answer:

    @GetMapping("/user/{id}") public String getUser(@PathVariable int id) { ... } -> Option A
  4. Quick Check:

    URL {id} matches @PathVariable int id [OK]
Hint: URL placeholder and @PathVariable name must match [OK]
Common Mistakes:
  • Missing {id} in URL path
  • Using @RequestParam instead of @PathVariable
  • Mismatching parameter name and URL placeholder
3. Given the following Spring Boot controller method:
@GetMapping("/product/{category}/{id}")
public String getProduct(@PathVariable String category, @PathVariable int id) {
    return category + "-" + id;
}

What will be the output when a client requests /product/electronics/42?
medium
A. electronics-42
B. 42-electronics
C. category-id
D. electronics42

Solution

  1. Step 1: Identify parameter values from URL

    URL /product/electronics/42 means category = "electronics", id = 42.
  2. Step 2: Understand return statement

    The method returns category + "-" + id, so it returns "electronics-42".
  3. Final Answer:

    electronics-42 -> Option A
  4. Quick Check:

    Return = category + "-" + id = electronics-42 [OK]
Hint: Match URL parts to parameters in order [OK]
Common Mistakes:
  • Swapping parameter order
  • Ignoring the dash '-' in return
  • Confusing @PathVariable with @RequestParam
4. Consider this Spring Boot controller method:
@GetMapping("/order/{orderId}")
public String getOrder(@PathVariable int id) {
    return "Order: " + id;
}

What will happen when a client requests /order/100?
medium
A. Returns "Order: 0"
B. Returns "Order: 100"
C. Throws an error because parameter name does not match path variable
D. Returns null

Solution

  1. Step 1: Check URL placeholder and method parameter names

    URL has {orderId}, but method parameter is named id without specifying name in @PathVariable.
  2. Step 2: Understand default matching behavior

    Without specifying the name in @PathVariable, Spring tries to match parameter name to path variable name. They differ, causing an error.
  3. Final Answer:

    Throws an error because parameter name does not match path variable -> Option C
  4. Quick Check:

    Parameter name must match path variable or specify name [OK]
Hint: Parameter name must match path variable or use @PathVariable("name") [OK]
Common Mistakes:
  • Assuming names can differ without annotation
  • Ignoring the need to specify variable name in @PathVariable
  • Expecting default value assignment
5. You want to create a Spring Boot controller method that handles URLs like /blog/{year}/{month}/{slug} where year and month are integers and slug is a string. Which of the following method signatures correctly uses @PathVariable to extract these values?
hard
A. @GetMapping("/blog/{year}/{month}/{slug}") public String getPost(@PathVariable int yr, @PathVariable int mo, @PathVariable String sl) { ... }
B. @GetMapping("/blog/{year}/{month}/{slug}") public String getPost(@PathVariable("year") int y, @PathVariable("month") int m, @PathVariable("slug") String s) { ... }
C. @GetMapping("/blog/{year}/{month}/{slug}") public String getPost(@PathVariable String year, @PathVariable String month, @PathVariable String slug) { ... }
D. @GetMapping("/blog/{year}/{month}/{slug}") public String getPost(@PathVariable int y, @PathVariable int m, @PathVariable String s) { ... }

Solution

  1. Step 1: Match URL placeholders with method parameters

    The URL has {year}, {month}, {slug}. Method parameters must match these names or specify them explicitly.
  2. Step 2: Check parameter names and @PathVariable usage

    @GetMapping("/blog/{year}/{month}/{slug}") public String getPost(@PathVariable("year") int y, @PathVariable("month") int m, @PathVariable("slug") String s) { ... } uses different parameter names (y, m, s) but explicitly maps them to URL placeholders using @PathVariable("name"), which is correct.
  3. Final Answer:

    @GetMapping("/blog/{year}/{month}/{slug}") public String getPost(@PathVariable("year") int y, @PathVariable("month") int m, @PathVariable("slug") String s) { ... } -> Option B
  4. Quick Check:

    Explicit name mapping allows different parameter names [OK]
Hint: Use @PathVariable("name") if parameter name differs from URL placeholder [OK]
Common Mistakes:
  • Using mismatched parameter names without specifying name
  • Using wrong data types for year/month
  • Assuming parameter names must always match URL placeholders
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard