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¶m=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 모두 사용하는 것도 가능하므로 해당 경우를 생각하는 것도 괜찮을 것 같다.
'Spring' 카테고리의 다른 글
스프링 환경설정 셋팅 (0) | 2024.04.18 |
---|---|
Controller에서 여러 인자를 받는 방법 (0) | 2024.03.05 |
페치조인(Fetch Join) (0) | 2024.02.20 |
[Spring] Service, 인터페이스 사용하는 이유? (0) | 2024.01.25 |
[Spring] @Transactional에 private 접근 제한자가 불가능한 이유 (1) | 2024.01.25 |