본문 바로가기
반응형
Spring/MVC

[MVC] @PathVariable, @RequestParam 사용법, 언제 사용하는지

by brightGarden02 2024. 5. 20.

@PathVariable

@PathVariable은 springframework가 제공하는 인터페이스입니다.

 

@PathVariable 사용이유: 메서드 매개변수를 URI 템플릿 변수에 바인딩하기 위해 사용합니다.

@RequestMapping을 포함한 다양한 요청 매핑 어노테이션인 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등과 함께 사용할 수 있습니다.

@GetMapping("/items/{itemId}")
public String item(@PathVariable Long itemId, Model model) {
    ...
}

 

 

 

메서드 매개변수를 다르게 하고 싶다면 소괄호를 사용하여 URI 템플릿 변수에 바인딩 하고 사용 가능합니다. 

@GetMapping("/items/{itemId}")
public String item(@PathVariable("itemId") Long id, Model model) {
    ...
}

 

 

 

@PathVariable을 통한 매개변수를 여러개 받으려면 해당 개수 만큼 @PathVariable을 선언하거나 

Map<String, String>을 사용하면 됩니다.

@PathVariable에 Map을 사용할 경우 Key, value로 String만 지원합니다.

@GetMapping("/items/{itemId}/details/{detailId}")
public String itemDetails(@PathVariable Long itemId, @PathVariable Long detailId, Model model) {
    	...
}

@GetMapping("/items/{itemId}/details/{detailId}")
public String itemDetails(@PathVariable Map<String, String> itemMap, Model model) {
    	...
}

 

 

 

메서드 매개 변수 타입을 Optional을 사용할 수 있습니다. 

@GetMapping("/item/{itemId}")
public String item(@PathVariable Optional<Long> itemId, Model model) {
	...    
}

 

 

 


@RequestParam

@RequestParam은 springframework가 제공하는 인터페이스입니다.

 

@RequestParam 사용 이유: query parameters, form data, multipart data를 메서드 매개변수에 바인딩하기 위해 사용합니다.

Query parameters: GET 요청으로 url의 쿼리 문자열에 포함된 파라미터(예: '?key=value')

Form data: POST 요청의 폼 데이터

Multipart data: 파일 업로드

@GetMapping("/item")
public String findItem(@RequestParam Long itemId) {
    ...
}

 

 


@PathVariable, @RequestParam 언제 사용하는지

@PathVariable 사용: URI 경로에 포함된 변수를 사용할 경우

@RequestParam 사용: 프론트에서 보내는 데이터 형식이 query parameters, form data, mulripart data일 경우

 

REST API에서는 주로 @PathVariable을 사용하지만 검색이나 필터링을 할 경우 쿼리 파라미터를 통한 데이터 전달로 @RequestParam을 사용합니다.

 

GET요청에서 @PathVariable을 사용했을 경우, 프론트에서 데이터 보내는 형식이 form data이더라도 POST요청에서 URL 구조를 일관되고 직관적으로 사용하기 위해 @PathVariable을 사용해도 됩니다.

 

 

참고:

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

https://www.baeldung.com/spring-request-param

 

 

 

 

 

댓글


반응형
반응형