본문 바로가기

Java Spring Boot

@PathVariable과 @RequestParam 차이?

@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와 같은 다양한 속성을 이용하여 파라미터를 처리할 수 있습니다.