rudu_std
@RequestParam과 @PathVariable 본문
@RequestParam , @PathVariable차이
위 2개의 어노테이션은 http의 비연결성을 극복하고 데이터를 전달하기 위한 방법들 중 하나로,
uri를 통해 전달된 값을 파라미터로 받아오는 역할을 한다.
쓰임이 비슷하여 자칫 혼동될 수 있으니 비교해보겠습니다[ㅔ
- uri를 통해 값을 전달하는 방식은 2가지가 있다.
1) http://localhost:8000/board?page=1&listSize=10
2) http://localhost:8000/board/1
쿼리스트링을 사용하여 여러개의 값을 전달하는 첫번째 방식은 @RequestParam을 통해 받아오고,
두번째 방식은 URL 경로의 일부를 변수로 받아서 @PathVariable을 사용하여 받아올 수 있다.
@RequestParam 사용법
@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword,
@RequestParam("page") int page) {
return "Searching for " + keyword + " on page " + page;
}
Http 요청 파라미터의 이름으로 바인딩하여 그 값을 변수에 저장한다.
@GetMapping("/search")
public String search(@RequestParam String keyword,
@RequestParam int page) {
return "Searching for " + keyword + " on page " + page;
}
요청 파라미터 이름과 메서드 파라미터 이름이 같다면 @RequestParam의 value 속성을 생략할 수 있다.
@GetMapping("/search")
public String search(String keyword, int page) {
return "Searching for " + keyword + " on page " + page;
}
요청 파라미터 이름과 메서드 파라미터 이름이 동일하면 @RequestParam을 완전히 생략할 수 있다.
@GetMapping("/search")
public String search(@RequestParam(required = true, defaultValue = "all") String keyword,
@RequestParam(required = false, defaultValue = "1") int page) {
return "Searching for " + keyword + " on page " + page;
}
@RequestParam에 required 옵션을 주어 true일 경우는 필수, false일 경우는 필수가 아닌 것으로 설정 가능하다.
required = false일 때 요청 파라미터에 값이 없으면 null이 저장된다.
만약 Integer 대신 int를 사용하게 된다면 오류가 발생하게 되어 주의해야 한다.
요청 파라미터 값이 없는 경우 defaultValue를 설정할 수 있다.
이 경우에는 null 대신 -1이 저장되게 되어 int를 사용할 수 있다.
@PathVariable 사용법
@RestController
public class UserController {
@GetMapping("/users/{id}")
public String getUserById(@PathVariable String id) {
return "User ID: " + id;
}
}
위 예제에서 /users/123로 요청이 들어오면 id는 123이 되고 "User ID: 123"이라는 응답이 반환된다.
@GetMapping("/users/{userId}/orders/{orderId}")
public String getOrderForUser(@PathVariable String userId, @PathVariable String orderId) {
return "User ID: " + userId + ", Order ID: " + orderId;
}
이 예제에서는 /users/1/orders/100 같은 요청에서 userId = 1, orderId = 100 으로 처리된다.
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") String userIdentifier) {
return "User ID: " + userIdentifier;
}
URL 경로 변수와 메서드 파라미터 이름이 다를 때는 value 속성을 사용해 매핑할 수 있다.
'Spring & Spring Boot' 카테고리의 다른 글
ResponseEntity (0) | 2024.08.25 |
---|---|
@RestController, @Controller (0) | 2024.08.20 |
REST API란 무엇인가? (0) | 2024.08.20 |
@PathVariable과 @RequestParam (0) | 2024.08.20 |
Spring DI && IoC (0) | 2024.08.08 |