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
이 됨