스프링부트에서 URL로 파라미터를 전달하는 2가지 방법

1
2
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하게 이용하는 방식이다.

쿼리스트링

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

1
2
3
4
5
6
7
8
9
10
@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 를 사용했다.

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

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


REST

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

1
2
3
4
5
6
7
8
9
10
@RestController
public class MemberController {
@Autowired
MemberService memberService;

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

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

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

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


Reference