Spring Framework 에서 URL 경로의 일부를 메소드 파라미터로 매핑할 때 사용되는 어노테이션.
RESTful 웹 서비스에서 자원 식별자와 같은 값을 URL 경로에서 추출할 때 자주 사용됨
예를 들어, 다음과 같은 URL 요청이 있을 때
GET /users/123
이 요청에서 123 이라는 값은 users 라는 자원에 대한 식별자(ID)로 간주됨. 이 값을 컨트롤러 메소드에서 받아 처리하려면 @PathVariable 을 사용할 수 있음
@RestController
public class UserController {
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") String userId) {
return "User ID: " + userId;
}
}
@PathVariable("id") 어노테이션을 사용하여 URL 경로의 {id} 부분을 메소드 파라미터 userId 에 매핑함
@PathVariable("id") 는 URL 경로에서 id 라는 부분을 추출하여 메소드 파라미터에 전달함true 이며, URL에 해당 변수가 포함되지 않으면 오류가 발생required = false 로 설정하면 해당 변수가 없어도 에러가 발생하지 않음기본적인 사용
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") String userId) {
return "User ID: " +userId;
}
여기서, /users/123 요청이 오면, userId 는 "123" 이 됨
여러 개의 Path Variables 사용
@GetMapping("/users/{userId}/orders/{orderId}")
public String getUserOrder(@PathVariable("userId") String userId, @PathVariable("orderId") String orderId) {
return "User ID: " + userId + ". Order ID: " + orderId;
}
/users/123/orders/456 요청이 오면, userId 는 "123", orderId 는 "456" 이 됨
만약 메소드 파라미터 이름이 @PathVariable 에서 지정한 이름과 동일하다면, 속성 이름을 생략할 수 있음
@GetMapping("/users/{id}")
public String getUserById(@PathVariable String id) {
return "User ID: " + id;
}
@PathVariable 의 필수 여부 설정
@GetMapping("users/{id}")
public String getUserById(@PathVariable(name = "id", required = false) String userId) {
if (userId == null) {
return "User ID is not provided";
}
return "User ID: " + userId;
}
required = false 로 설정하면 id 가 없을때 userId 는 null 이 됨