@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
'Spring > MVC' 카테고리의 다른 글
[MVC] 정수 오버플로우 예외 처리 - GlobalExceptionHandler 활용 (0) | 2024.09.05 |
---|---|
[MVC] 웹 페이지 성능 최적화: EhCache를 활용한 데이터 캐싱 구현 (0) | 2024.05.31 |
[MVC] MVC1, MVC2 차이점 (0) | 2024.05.07 |
Dispatcher-Servlet(디스패처 서블릿) (0) | 2022.12.08 |
댓글