기록하는 공간
경로 매개변수(@PathVariable)와 쿼리 매개변수(@RequestParam) 본문
코드를 짜면서 controller 들을 훑어보았는데, 대부분 @RequestParam을 사용하였다.
…
문득 생각이 들었다. @RequestParam은 무엇일까? 왜 이걸 사용하는거지? 내가 이걸 잘 알고 사용하는 건가?
대충은 알고 있다. URL뒤에 ?를 붙이고 key=value 형태로 전달된다는 것을.
근데 또 @PathVariable 이란 어노테이션도 사용가능하지 않나? 어디서 본 적이 있었는데?
둘이 뭐가 다른거지?
그래서 알아보기로 했다.
@PathVariable와 @RequestParam 어노테이션은 무엇인가.
💡 클라이언트가 호출한 URL의 파라미터를 받아서 처리하는 어노테이션이다.
@PathVariable 이란?
- 경로 매개변수라고 하고, URL에 직접 포함이 된다.
- 주로 리소스의 식별자를 전달하거나(상세 조회, 수정, 삭제), 특정 리소스를 조회하는 데 사용된다.
사용법은 아래와 같다.
요청 :
1. <http://localhost:8080/giwoong>
2. <http://localhost:8080/giwoong/23>
@RestController
public class example() {
// 1.
@GetMapping("/{name}")
public String myName(@PathVariable("name") String name) {
return name; // giwoong이 반환된다
}
// 2.
@GetMapping("/{name}/{age}")
public String myNameAndAge(@PathVariable("name") String name,
@PathVariable("age") String age) {
return "성공!";
}
}
2번 경우를 보면 name에는 giwoong이 할당되고 age에는 23이 할당된다.
이와 같이 여러 개의 인자를 정의하는 것도 가능하다.
만약 변수가 많다면 Map<String, String> 형식도 이용가능하다.
2번 코드를 가져와서 변형해 보겠다.
@GetMapping("/{name}/{age}")
public String myNameAndAge(@PathVariable Map<String, String> map) {
return "성공!";
}
똑같이 2번 요청을 보냈을 경우 name에는 giwoong이 할당되고 age에는 23이 할당된다.
@RequestParam이란?
- 서두에서 언급했듯이, URL뒤에 ?를 붙이고 key=value형태로 전달되는 파라미터를 의미한다.
- 쿼리 매개변수는 주로 필터링, 정렬, 페이지네이션 등 검색 조건을 전달하거나 추가적인 정보를 전달하는 데 사용된다.
사용법은 아래와 같다.
요청:
1. <http://localhost:8080/user?name=giwoong>
2. <http://localhost:8080/user?name=giwoong&age=23>
@RestController
public class example() {
// 1.
@GetMapping("/user")
public String myName(@RequestParam("name") String name) {
return name; // giwoong이 반환된다
}
// 2.
@GetMapping("/user")
public String myNameAndAge(@RequestParam("name") String name,
@RequestParam("age") String age) {
return "성공!";
}
}
@PathVariable과 같이 여러 인자를 정의하는 것도 가능하다.
@RequestParam을 사용하여 여러 개의 쿼리 매개변수를 전달할 때는 &으로 구분하여 나열한다.
@PathVariable과 @RequestParam을 복합적으로도 사용이 가능하다.
요청:
<http://localhost:8080/user?name=giwoong>
@RestController
public class example() {
@GetMapping("/{category}")
public String myNameAndAge(@PathVariable("category") String category,
@RequestParam("name") String name) {
return "성공!";
}
}
여기서 category은 user이 할당되고, name은 giwoong이 할당된다.
마무리
두 어노테이션이 비슷하면서도 다르다.
… 마무리 멘트 할 게 없네요.
'Spring' 카테고리의 다른 글
CSRF 방어 방법, 코드 (Security 사용 X) (0) | 2024.07.05 |
---|---|
NGINX로 Http, Https 적용하기 (0) | 2024.07.02 |
빌더 패턴(Builder Pattern)은 무엇인가 (0) | 2023.11.29 |
@ManyToMany를 사용하지 말자! (0) | 2023.07.26 |
intelliJ에서 Api통신을 해보자! (0) | 2023.07.20 |