본문 바로가기

Java/Spring

@RequestParam과 @PathVariable

복습하던 중 까먹으면 안 될 것 같아 기록을 남겨본다.

 

@RequestParam과 @PathVariable 어노테이션은 스프링 컨트롤러 단에서 많이 쓰이는 어노테이션이다.

 

두 어노테이션은 데이터의 전달을 위해 사용된다. Http에서 요청 간 데이터를 보장해주지 않기 때문에 이 데이터를 보관하고 있어야 할 곳이 필요하다.

 

따라서 스프링은 위 어노테이션들을 이용하여 url에 값을 전달하여 데이터를 전달할 수 있다.  

 

가장 큰 차이점은 @PathVariable은 어떤 요청을 하던 딱 하나만 사용할 수 있다는 점이다.

 

반면 @RequestParam의 경우 여러가지 매개변수를 통해 요청을 여러개 해줄 수 있다.

 

아래 코드를 보자.

@RestController
@RequestMapping("test")
public class UserController {
	
  @GetMapping("/{id}")
  public String pathVariableTest(@RequestParam
          Map<String, String> maptest, @PathVariable String id) {
      
      return "아이디: \n"+ id + "\n\r"+
      	   "파라미터 키: "+ maptest.keySet() + "\n"+
      	   "파라미터 값: "+ maptest.values() + "\n";
  }
  
  //요청 URL
  http://localhost:8100/test/id=1?key1=key1Value&key2=key2Value
  
  //결과
  아이디: id=1 파라미터 키: [key1, key2] 파라미터 값: [key1Value, key2Value]

위 코드를 보면 첫번째로 클래스 전체는 @RestController를 통해 해당 클래스가 Rest 방식의 컨트롤러라는 걸 명시해주고 있다.

 

그리고 @RequestMapping("test")을 통하여 요청되는 Url이 localhost:8080/test 일 경우 아래 여러 메소드들을 활용할 수 있도록 명시해주었다.

 

이제 이 페이지의 중요한 부분인 pathVaiableTest 메서드를 보자.

 

먼저 GET 요청을 위한 @GetMapping 어노테이션을 사용했다. 해당 어노테이션에 "/{id}" 경로를 Mapping 하고 PathVariable을 사용하므로써 해당 Url에 접근하는 어떠한 값을 사용하여 데이터를 전달 할 수 있도록 코드를 구성했다.

그리고 @RequestParam 으로 Map을 사용하여 여러 파라미터를 받을 수 있도록 만들어보았다.

 

이게 @RequestParam과 @PathVariable의 차이이다.

 

Map을 사용한다는 것은 키, 값 쌍으로 구성된 어떠한 데이터를 여러 개 담겠다는 것인데, @PathVariable의 경우 단지 @GetMapping 되었던 "{id}" 값 하나만 매개변수로 받을 수 있다.

 

http://localhost:8100/test/id=1?key1=key1Value&key2=key2Value

 

위 URL 경로로 접근했을 떄 결과를 보면 자세히 알 수 있다.

 

조금 어렵게 설명해두었지만, 여러 번 사용하다보면 확실한 차이를 알 수 있을 것이다.

'Java > Spring' 카테고리의 다른 글

@JoinColumn(mappedBy)과 연관 관계의 주인  (0) 2022.12.09
Spring + MySQL 연동  (0) 2022.11.24
Junit 테스트  (0) 2022.11.03
@ResponseBody  (0) 2022.11.03
@RequestParam  (0) 2022.11.03