본문 바로가기
Spring

URL로 파라미터를 전달하는 2가지 방법-PathVariable/RequestPar

by asdft 2024. 3. 5.

 

GET http://youngjinmo.github.io/member?id=2 // type 1
GET http://youngjinmo.github.io/member/2 // type 2

 

스프링부트에서 URL로 파라미터를 전달하는 두가지 방식이 있다.

type 1의 방식이 쿼리 스트링을 적용한 방식이고, type 2가 REST하게 이용하는 방식이다.

 

 

type 1번처럼 요청을 할 경우에 추가적인 파라미터가 존재할 경우 /api/v1/pet?id=XXX&param=YYY와 같이 변하고,

type 2번의 경우에는 추가적인 파라미터가 존재할 경우 /api/v1/pet/XXX/YYY 와 같은 형태로 변형된다.

따라서 type 2번의 경우에는 입력받을 파라미터가 많이 존재한다면 어떤 값이 입력되는지 알기가 쉽지 않다.

 

쿼리스트링

쿼리스트링으로 파라미터를 URL로 전송할 때엔 컨트롤러에서 파라미터를 받을때 @RequestParam 을 사용한다.

@RestController
public class MemberController {
   @Autowired
   MemberService memberService;
  
   @GetMapping("/member")
   public List<MemberVO> getMemberById(@RequestParam Long id){
      return memberService.selectMemberById(id);
   }
}

 

실습 예제를 만들면서 포스트맨으로 간단히 API 조회를 할 수 있도록 Http Body에 결과를 담아 반환하는 컨트롤러를 만들었다. 이를 위해 @Controller 대신 @RestController 를 사용했다.

 

GET http://localhost:8080/member?id=2

 

@RequestParam 어노테이션을 컨트롤러 파라미터에 작성하면 쿼리 스트링으로 들어오는 영역에서 id 값을 매핑해서 가져올 수 있다.

 


REST

RESTful하게 파라미터를 받기 위해서 컨트롤러에서 @PathVariable 어노테이션을 사용했다.

@RestController
public class MemberController {
   @Autowired
   MemberService memberService;
  
   @GetMapping("/member/{id}")
   public List<MemberVO> getMemberById(@PathVariable("id") Long id){
      return memberService.selectMemberById(id);
   }
}

 

이외에 @GetMapping() 어노테이션에 @PathVariable 어노테이션으로 가져올 파라미터를 {} 형태로 작성해줘야 파라미터로 매핑이 이뤄진다.

 

GET http://localhost:8080/member/2

 

쿼리스트링은 URL에 입력하는 파라미터 순서가 중요하지 않으나 REST 방식으로 URL에 파라미터를 담아서 전송할 경우, 파라미터의 위치가 중요해진다. 이 떄문에 @RequestMapping 또는 @GetMapping 어노테이션에서 파라미터명을 매핑해줘야한다.

 

 

마무리

@PathVariable은 @RequestParam과 다르게 default 값을 설정하지 않으므로 만약 default 값이 필요한 조회 요청을 한다면 @RequestParam을 사용하여 구현하면 되고,

앞서 보여주었던 예제와 같이 id와 같이 필수로 입력되어야 하는 값이라면 @PathVariable을 사용하여 구현하면 될 것같다.

 

그리고 2가지 기능 모두가 필요하다고 한다면 @PathVariable, @RequestParam 모두 사용하는 것도 가능하므로 해당 경우를 생각하는 것도 괜찮을 것 같다.