Bird
Raised Fist0
Spring Bootframework~5 mins

@PathVariable for URL parameters in Spring Boot

Choose your learning style10 modes available
Introduction

@PathVariable lets you get parts of the URL as variables in your code. This helps your app respond differently based on the URL.

When you want to get an ID from the URL, like /user/123 to find user 123.
When you want to handle URLs with changing parts, like /product/phone or /product/laptop.
When building REST APIs that use URLs to specify resources.
When you want clean URLs that are easy to read and understand.
When you want to avoid using query parameters for simple data in the URL path.
Syntax
Spring Boot
@GetMapping("/path/{variableName}")
public ReturnType methodName(@PathVariable Type variableName) {
    // use variableName here
}

The part in curly braces {} in the URL is the variable name.

The method parameter annotated with @PathVariable must match the variable name in the URL.

Examples
This gets the 'id' from the URL like /user/123 and returns it.
Spring Boot
@GetMapping("/user/{id}")
public String getUser(@PathVariable String id) {
    return "User ID: " + id;
}
This gets two variables from the URL, orderId and itemId.
Spring Boot
@GetMapping("/order/{orderId}/item/{itemId}")
public String getOrderItem(@PathVariable int orderId, @PathVariable int itemId) {
    return "Order: " + orderId + ", Item: " + itemId;
}
You can specify the variable name explicitly in @PathVariable(name = "name") if the method parameter name is different.
Spring Boot
@GetMapping("/product/{name}")
public String getProduct(@PathVariable(name = "name") String productName) {
    return "Product: " + productName;
}
Sample Program

This simple Spring Boot controller has one URL endpoint /user/{id}. When you visit /user/45, it returns 'User ID received: 45'.

Spring Boot
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user/{id}")
    public String getUserById(@PathVariable String id) {
        return "User ID received: " + id;
    }
}
OutputSuccess
Important Notes

If the method parameter name matches the path variable name, you can omit the name attribute in @PathVariable.

Path variables are always strings but Spring can convert them to other types like int or long automatically.

Use @PathVariable only for parts of the URL path, not for query parameters (use @RequestParam for those).

Summary

@PathVariable extracts values from the URL path.

It helps create dynamic and readable URLs.

Use it in Spring Boot controller methods with @GetMapping or other mapping annotations.

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