@RequestParam과 @PathVariable 차이

2022. 11. 7. 14:47Spring

이전 포스팅에  웹 계층 개발 부분을 정리하면서 '@RequestParam과 @PathVariable 차이'를 중간에 삽입해서 적었던 기억이 있습니다.

 

하지만 토이 프로젝트를 할 때나 다른 사람들의 코드를 볼 때 자주 헷갈리는 개념이므로 따로 빼서 포스팅하게 되었습니다. 

 

 

 

Spring에서 @RequestParam @PathVariable차이

Controller 단에서 위 두 어노테이션은 uri를 통해 전달된 값을 파라미터로 받아오는 역할을 합니다.
쓰임과 차이점에 중점을 두면서 정리해보겠습니다.

 
http://localhost:8000/board?page=1&listSize=20 ← @RequestParam방식
http://localhost:8000/board/1 ← @PathVariable방식

 

@RequestParam

예시 코드

@GetMapping({"board", "board?page={page}&listSize={listSize}"})
	public String getBoardList(Model model
			, @RequestParam(value = "page", required = false, defaultValue = "1") int page
			, @RequestParam(value = "listSize", defaultValue = "10") int listSize
			) throws Exception {
		.
		.
		.
		return "board/boardList";
	}

 

게시글 리스트를 받아오는 api입니다. get 요청을 받으면 쿼리 스트링을 통해 전달된 page 값과 listSize 값을 받아와서 @RequestParam이 파라미터인 int page와 int listSize에 각각 대입해줍니다.

 

괄호 안의 속성 값은 각각 이렇습니다.

  • value = uri에서 바인딩하게 될 값
  • required = true 일 시 , 필수적으로 값이 전달되어야 하며 없으면 에러
  • defaultValue = 값이 없을 때 기본값으로 사용할 값

 

 

@PathVariable

예시 코드

@ResponseBody
	@PostMapping("/board/{id}")
	public ResponseDto<Integer> updateBoard(@PathVariable("id") int id, ) throws Exception {
    	Board board = new Board();
		board.setId(id);
		
	}

@PathVariable은 어떤 요청이든 간에 딱 하나만 쓸 수 있습니다. 주로 post 요청에 많이 씁니다.

 

 

 

정리

@RequestParam과 @PathVariable은 둘 다 데이터를 받아오는 데에 사용하고

@PathVariable은 값을 하나만 받아올 수 있으므로, 쿼리 스트링 등을 이용한 여러 개 데이터를 받아올 때는 @RequestParam을 사용합니다.

 

 

 

 

 

 

 

 

 

 

출처 : https://velog.io/@dongscholes/JavaSpringBoot-RequestParam-vs-PathVariable-%EC%93%B0%EC%9E%84%EC%83%88-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%B0%A8%EC%9D%B4%EC%A0%90