https://www.youtube.com/watch?v=CRlPIzK1ltU
Yes, you can make a path variable optional in Spring by using @PathVariable with the required attribute set to false. However, for this to work, you also need to provide a default value or handle the absence of the variable in your logic.
Here are a few ways to handle optional path variables:
1. Using Default Path Without Variable
Define two endpoints: one with the variable and one without.
@RestController
@RequestMapping("/example")
public class ExampleController {
@GetMapping
public String handleWithoutPathVariable() {
return "No path variable provided";
}
@GetMapping("/{id}")
public String handleWithPathVariable(@PathVariable String id) {
return "Path variable: " + id;
}
}
2. Using @PathVariable with required = false
This approach is possible when the path variable is declared in the URL template as optional (e.g., {id?} in Spring Boot 3+).
@RestController
@RequestMapping("/example")
public class ExampleController {
@GetMapping({"https://dev.to/", "/{id}"})
public String handleWithOptionalPathVariable(@PathVariable(required = false) String id) {
if (id == null) {
return "No path variable provided";
}
return "Path variable: " + id;
}
}