클라이언트로부터 전달받은 쿼리 파라미터(Query Parameter)를 컨트롤러 메서드의 매개변수로 매핑합니다. 일반적으로 URL에 ? 뒤에 이어지는 키-값 형태의 데이터를 전달하는 방식입니다.
일반적으로,
@RequestParam(query parameter)
는 필터링, 정렬, 페이징 등의 추가 정보를 전달하는 데 사용됩니다.
예를 들어, 특정 사용자의 게시물을 검색하는 API가 있다고 가정해 보겠습니다.
GET /api/posts?author=John&sort=desc&limit=10
이 경우, "author"는 검색할 사용자 이름, "sort"는 정렬 방식, "limit"은 반환할 게시물의 최대 개수를 나타냅니다. 이 정보들은 쿼리 파라미터를 사용하여 API에 전달되며, 서버에서 해당 정보를 사용해 처리할 수 있습니다.
@RestController
@RequestMapping("/api")
public class PostController {
@GetMapping("/posts")
public ResponseEntity<List<Post>> getPosts(@RequestParam(value = "author", required = false) String author,
@RequestParam(value = "sort", required = false, defaultValue = "asc") String sort,
@RequestParam(value = "limit", required = false, defaultValue = "10") int limit) {
// ... 로직 구현
// 예를 들어, 데이터베이스에서 author, sort, limit에 맞게 게시물을 검색하여 반환하는 로직을 작성합니다.
List<Post> posts = new ArrayList<>(); // 결과를 담을 리스트
// ... 검색한 게시물을 posts 리스트에 추가
return ResponseEntity.ok(posts);
}
}
위처럼 requestParam은 쿼리파라미터를 활용하여 arguments를 서버에 전달하는 방법입니다. 이는 위에서 확인할 수 있듯이 required
속성과 defaultValue
속성을 잘 활용할 수 있어 용도가 다양합니다.
@PathVariable 애노테이션은 요청 URL의 일부를 컨트롤러 메서드의 매개변수로 매핑합니다. 이 방식은 RESTful 웹 서비스에서 자주 사용되며, URL에서 특정 자원을 식별하는 데 사용됩니다.
일반적으로
@PathVariable
은 리소스의 식별자를 전달하는 데 사용됩니다.
예를 들어, 특정 사용자의 정보를 가져오는 API가 있다고 가정해 보겠습니다.
https://example.com/users/42
이 경우, "42"는 사용자의 고유 식별자(ID)를 나타냅니다. 이 정보는 @PathVariable을 사용하여 API에 전달되며, 서버에서 해당 정보를 사용해 해당 사용자의 정보를 반환할 수 있습니다.
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable("id") Long id) {
// ... 로직 구현
// 예를 들어, 데이터베이스에서 id에 해당하는 사용자 정보를 검색하여 반환하는 로직을 작성합니다.
User user = new User(); // 결과를 담을 User 객체
// ... 검색한 사용자 정보를 user 객체에 설정
return ResponseEntity.ok(user);
}
}
만약 어떤 resource를 식별하고 싶으면 Path Variable을 사용하고,
정렬이나 필터링을 한다면 Query Parameter를 사용하는 것이 Best Practice이다.