일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Effective Java
- @SpyBean
- restTemplate
- NotBlank
- db
- 이펙티브 자바
- Service Locator 패턴
- Firebase
- NotEmpty
- Service Locator
- 트랜잭션
- 디자인 패턴
- deleteById
- Web
- 플라이웨이트
- Spring Boot
- @ControllerAdvice
- @Valid
- @MockBean
- FCM
- Connection Pool
- Proxy Patter
- SQL 삽입 공격
- java
- Effetive Java
- Item04
- JPA
- 데이터베이스
- springboot
- multi module
- Today
- Total
NoTimeForDawdling
@PathVariable과 @RequestParam의 차이점 본문
@PathVariable과 @RequestParam은 모두 HTTP 요청에서 값을 추출하는데 사용되지만 미묘한 차이가 있습니다.
이름에서 알 수 있듯이 @PathVariable은 URL에서 값을 추출하며, @RequestParam은 URL에서 요청 매개 변수를 가져옵니다.
예제
- HTTP 요청: http://localhost:8080/shop/order/1001/receipts?date=2020-02-18
- @RequstParam: data 매개 변수를 가져올 수 있습니다.
- @PathVariable: orderId, 즉 "1001"을 추출할 수 있습니다.
@GetMapping(value = "/order/{orderId}/receipts")
public void exam(@PathVariable("orderId") int order,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
required = false: Query Parameter가 null일 수도 있음을 나타냅니다.
@RequsetParam을 사용하여 Query Parameters 가져오기
예로 주문 및 거래에 대한 세부 정보를 반환하는 URL이 다음과 같다고 가정해 보겠습니다.
URL: http://localhost:8080/orders?id=1001
위 URL에서 Query Parameters를 이용하기 위해 다음과 같이 코드를 작성했습니다.
@GetMapping("/orders")
public String showOrderDetails(@RequestParam("id") String orderId, Model model){
model.addAttribute("orderId", orderId);
return "orderDetails";
}
만약 Query Parameter 변수의 이름과 Argument 이름이 동일한 경우 Query Parameter의 이름을 지정하지 않고 @RequestParam을 사용할 수 있습니다.
URL: http://localhost:8080/orders?orderId=1001
@GetMapping("/orders")
public String showOrderDetails(@RequestParam String orderId, Model model){
model.addAttribute("orderId", orderId);
return "orderDetails";
}
위 코드는 Query Parameter의 이름을 따로 지정하지 않았습니다. Query Paramter 변수 이름과 Argument 이름이 동일하기 때문입니다.
@PathVariable을 사용하여 값 추출하기
@PathVariable은 URL 자체에서 일부 값을 얻는 데 사용됩니다.
예로 ISBN 번호를 사용하여 책을 검색하는 URL이 다음과 같다고 가정해보겠습니다.
URL: http://localhost:8080/book/1001
위 URL에서 ISBN 값을 추출하기 위해 다음과 같이 코드를 작성했습니다.
@GetMapping(value = "/book/{ISBN}", method = RequestMethod.GET)
public String showBookDetails(@PathVariable("ISBN") String id, Model model) {
model.addAttribute("ISBN", id);
return "bookDetails";
}
@RequestParam과 마찬가지로 Variable 이름과 Argument 이름이 동일하면 값 속성을 생략할 수 있습니다.
@GetMapping(value = "/book/{ISBN}", method = RequestMethod.GET)
public String showBookDetails(@PathVariable String ISBN, Model model) {
model.addAttribute("ISBN", ISBN);
return "bookDetails";
}
@PathVariable과 RequestParam의 차이점
- @RequestParam의 Query Parameter를 추출하는데 사용되며, @PathVariable은 URL에서 바로 데이터를 추출하는데 사용됩니다.
- URL을 통해 같은 값을 포함하지만 RESTful Web Service에서는 @PathVariable이 더 적합합니다.
- URL 자체에서 일부 값을 얻기 때문입니다.
- @RequestParam은 required 속성 및 defaultValue 속성을 사용하여 비어있는 경우 기본값을 지정할 수 있습니다.
- Spring 4.3.3부터 @PathVariable에서 required 속성을 사용할 수 있습니다.
참고
'SpringBoot' 카테고리의 다른 글
[Spring Boot] RestTemplate 사용 방법 (0) | 2021.04.13 |
---|---|
Spring Boot 의존성 주입 방법 (0) | 2021.03.25 |
Spring IoC 컨테이너 (0) | 2021.02.19 |
빈 주입 대상 설정하기(@Qualifier, @Primary) (0) | 2021.02.11 |
Spring Boot properties 값 주입 방법 (0) | 2021.02.03 |