@PathVariable은 {userId}와 같은 특정 정보를 받아올 때 사용한다고 이해되고,
@RequestParam의 경우는 users/search?keyword=john&age=30 와 같은 형태의 쿼리 파라미터를 추출할 때 사용된다고 이해됨.
@PathVariable과 @RequestParam은 스프링 프레임워크에서 사용되는 두 가지 다른 어노테이션입니다.
@PathVariable: 이 어노테이션은 URL 경로(path)에서 특정 부분을 추출하여 메서드의 매개변수에 매핑합니다.
일반적으로 URL 경로에 포함된 동적인 값(예: /users/{userId})을 추출할 때 사용됩니다.
이를 통해 URL 경로의 일부를 메서드로 전달할 수 있습니다.
예시:
java
@GetMapping("/users/{userId}")
public User getUserById(@PathVariable Long userId) {
// userId에 해당하는 사용자 정보 반환
}
@RequestParam: 이 어노테이션은 HTTP 요청의 쿼리 문자열(query string)에서 파라미터를 추출하여
메서드의 매개변수에 매핑합니다.
즉, URL에 ?key=value 형태로 전달되는 쿼리 파라미터를 추출할 때 사용됩니다.
예시:
java
@GetMapping("/users")
public List<User> getUsersByRole(@RequestParam String role) {
// role 값에 해당하는 사용자 목록 반환
}
따라서, @PathVariable은 URL 경로에서 동적인 값을 추출하고,
@RequestParam은 URL의 쿼리 문자열에서 파라미터를 추출합니다.
두 어노테이션은 데이터를 받는 위치와 그 목적이 다르므로 사용하는 상황에 따라 적합한 것을 선택하여 사용해야 합니다.
+@RequestParam의 예시
@RequestParam은 HTTP 요청의 쿼리 문자열(query string)에서 파라미터를 추출하는 데 사용됩니다.
주로 GET 요청에서 사용되며, URL에 포함된 쿼리 파라미터를 추출하여 메서드의 매개변수에 매핑합니다.
예를 들어, 사용자 목록을 필터링하거나 검색하기 위해 쿼리 문자열에 파라미터를 전달하는 경우에
@RequestParam을 사용할 수 있습니다.
java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getUsersByRole(@RequestParam String role) {
return userService.getUsersByRole(role);
}
@GetMapping("/search")
public List<User> searchUsers(
@RequestParam(name = "keyword", required = false) String keyword,
@RequestParam(name = "age", defaultValue = "0") int age) {
// 키워드와 나이를 이용한 사용자 검색
return userService.searchUsers(keyword, age);
}
}
위의 예시에서:
getUsersByRole 메서드는 /users?role=admin와 같은 URL 요청에서 role 쿼리 파라미터를 받아와서
해당 역할(role)에 해당하는 사용자 목록을 반환합니다.
searchUsers 메서드는 /users/search?keyword=john&age=30와 같은 URL 요청에서
keyword와 age 쿼리 파라미터를 받아와서 해당 키워드와 나이로 사용자를 검색하고 반환합니다.
keyword는 필수값은 아니며, age는 기본값으로 0을 갖습니다.
@RequestParam 어노테이션의 name 속성은 실제 요청 URL의 파라미터 이름을 지정하고,
required 및 defaultValue와 같은 다양한 속성을 이용하여 파라미터를 처리할 수 있습니다.
'Java Spring Boot' 카테고리의 다른 글
Optional, Optional.of 설명 (0) | 2023.11.30 |
---|---|
질문) service, repository(@Query) / 코드 인증시 로컬시간 왜 필요? (0) | 2023.11.29 |
생성자는 언제 실행이 되는지? (1) | 2023.11.29 |
자바) 생성자, 객체 간단한 예제 코드 (0) | 2023.11.28 |
@Annotation 정리 (0) | 2023.11.27 |