Spring MVC에서 클라이언트의 데이터를 받아 컨트롤러로 전달하는 어노테이션 2가지가 있다.
이번 포스트에서는 이 두 어노테이션에 대해서 알아본다.
예를 들어 유저의 이름을 받아서 JPA를 활용해 데이터베이스로 넘겨주는 컨트롤러를 만든다고 해보자,
@GetMapping("/{name}")
public void autoSave(
@PathVariable String name
){
var user = UserEntity.builder().name(name).build();
userRepository.save(user);
}
이 메서드가 컨트롤러 파일의 api/user 경로로 들어가 있다고 생각해보자.
로컬로 돌리면 http://localhost:8080/api/이순신
으로 GET요청을 보내면 user의 name으로 들어가고 이게
UserRepository로 연결되어 JpaRepository에서 제공하는 save메서드로 이동해 데이터베이스까지 들어간다.
여기서 포인트는 데이터를 보내려면 GET 요청을 http://localhost:8080/api/이순신 으로 보내야 한다는 것이다.
이 어노테이션은 이름에서 알 수 있듯이 파라미터를 사용한다.
먼저 코드를 예로 들면 아까 위의 코드와 똑같은 기능을 수행하는 코드를 보면
@GetMapping("/name")
public void autoSave(
@RequestParam String name
){
var user = UserEntity.builder().name(name).build();
userRepository.save(user);
}
이 코드에서는 http://localhost:8080/api/name으로 GET 요청을 보내야 한다.
그리고 파라미터라는 이름과 같이 내용은 쿼리로 넣어줘야 한다.
쿼리로 넣어주는 방법은 아래와 같다.
http://localhost:8080/api/user/name?name=이순신
쿼리 매개변수는 URL의 끝에 ?를 사용하여 시작한다. 그 다음에는 key=value 형식의 쌍이 오는데, 여러 쌍을 사용할 경우 &로 구분된다.
프로젝트의 요구 사항과 API 설계에 따라 두 방법을 사용할 때가 다르다. RESTful API를 설계할 때는 주로 @PathVariable을 사용하고, 필터링, 검색 또는 정렬 기능을 구현할 때는 @RequestParam을 사용하는 경향이 있다고 한다.