@RequestParam, @PathVariable을 사용할 때

두 어노테이션 모두 uri를 통해 값을 파라미터로 받아오는 역할을 한다. 즉, http의 비연결성을 극복하고 데이터를 받아오기 위해 사용한다.

  • 1: /mysite/id/1
  • 2: /mysite?id=1&page=1

1번의 방식이 PathVariable, 2번의 방식이 RequestParam이다.

차이점

  • PathVariable은 1개의 데이터만 받아올 수 있다.
  • RequestParam은 여러개의 데이터를 받아올 수 있다.
  • RequestParam은 Get/Post 방식으로 uri를 이용하거나, ajax 요청을 통해 body에 담아온 데이터를 여러 타입으로 받을 수 있다.

우선 데이터의 수에 따라 달라지는 것을 확인할 수 있다. 즉, 데이터가 1개가 넘어가면 RequestParam의 방식을 선택해야한다. 또한, 보안이 필요한 회원가입등의 작업을 할때도 RequestParam의 방식이 필요하다.

사용법

@PathVariable

@GetMapping("/mysite/id/{id}")
public String getMysiteById(@PathVariable("id") String item) {
	return "mysite";
}
    

해당 방식을 통해 {id}의 값을 받아 올 수 있다. 받아온 값을 통해 해당 내용을 반환하는 내용을 작성 할 수 있다.

  • @PathVariable("id"): id의 값을 가져온다.

@RequestParam

적은 수의 매개변수일 때

@GetMapping("/mysite")
// @PostMapping("/mysite")
public String getMysite(@RequestParam String id, @RequestParam int page) {
    return "mysite";
}

매개변수가 많을 때

@GetMapping("/mysite")
// @PostMapping("/mysite")
public String getMysite(@RequestParam Map<String, String> params) {
	String id = params.get("id");
    String page = params.get("page");
    return "mysite";
}

@RequestParam 좀 더 알아보기

  • 위에 코드와 같이 parameter을 가져올 때, 변수명과 parameter의 이름을 같도록 설정해서 가져올 수 있다.
  • @RequestParam(name = "id") / @RequestParam(value = "id"): 쿼리 스트링의 이름에 따라 값을 가져온다.
  • @RequestParam(defaultValue = "defaultVal"): 기본 값 설정, 이 때의 required는 의미가 없다.
  • @RequestParam(required = true): 필수로 필요한지? / 기본값은 true

@PathVariable과 @RequestParam을 같이 사용하기

@GetMapping("/mysite/{id}")
public String exampleMethod(@PathVariable("id") int id, @RequestParam("page") int page) {
	return "mysite";
}

해당 방식으로 사용하는 경우가 많다.

정리

@PathVariable과 @RequestParam는 http의 비연결성을 극복하고 uri로 부터 매개변수를 받아오는 방식이다. 해당 방식을 이용하여 회원가입, 데이터 조회등의 많은 일을 수행할 수 있다.

profile
백엔드 개발자가 꿈인 컴공과

2개의 댓글

comment-user-thumbnail
2024년 6월 4일

PathVariable도 여러 값 사용 가능합니다. Map<String, String>으로 받는것도 가능합니다
여러 블로그에서 잘못된 정보를 알려주고 있는 것 같습니다

https://www.baeldung.com/spring-pathvariable

1개의 답글
Powered by GraphCDN, the GraphQL CDN