1. 개요
이 빠른 예제에서는 Spring의 @RequestParam 어노테이션과 그 속성을 살펴볼 것 입니다.
간단히 말해서 @RequestParam 을 사용 하여 쿼리 매개 변수, 양식 매개 변수 및 요청에서 파일까지 추출 할 수 있습니다 .
2. 간단한 매핑
id 라는 쿼리 매개 변수를 받는 / api / foos 엔드 포인트가 있다고 가정 해 보겠습니다 .
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
return "ID: " + id;
}
이 예에서는 @RequestParam 을 사용하여 id 쿼리 매개 변수 를 추출했습니다 .
간단한 GET 요청은 getFoos를 호출 합니다 .
http://localhost:8080/api/foos?id=abc
----
ID: abc
다음으로 어노테이션의 속성 인 name , value , required , defaultValue를 살펴 보겠습니다 .
3. 요청 매개 변수 이름 지정
이전 예에서 변수 이름과 매개 변수 이름은 모두 동일합니다.
하지만 때때로 우리는 이것들이 달라지기를 원합니다. 또는 Spring Boot를 사용하지 않는 경우 특수 컴파일 타임 구성을 수행해야 할 수 있습니다. 그렇지 않으면 매개 변수 이름이 실제로 바이트 코드에 포함되지 않습니다.
다행히도 name 속성을 사용하여 @RequestParam 이름을 구성 할 수 있습니다 .
@PostMapping("/api/foos")
@ResponseBody
public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) {
return "ID: " + fooId + " Name: " + name;
}
@RequestParam (value = "id") 또는 @RequestParam ( "id") 만 수행 할 수도 있습니다 .
4. 선택적 요청 매개 변수
@RequestParam 어노테이션이 달린 메서드 매개 변수 는 기본적으로 필요합니다.
즉, 요청에 매개 변수가 없으면 오류가 발생합니다.
GET /api/foos HTTP/1.1
-----
400 Bad Request
Required String parameter 'id' is not present
필수 속성을 사용하여 @RequestParam 을 선택 사항으로 구성 할 수 있습니다 .
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false) String id) {
return "ID: " + id;
}
이 경우 둘 다 :
http://localhost:8080/api/foos?id=abc
----
ID: abc
과
http://localhost:8080/api/foos
----
ID: null
메소드를 올바르게 호출합니다.
매개 변수를 지정하지 않으면 메서드 매개 변수가 null에 바인딩됩니다 .
4.1. Java 8 선택 사항 사용
또는 Optional 에서 매개 변수를 래핑 할 수 있습니다 .
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam Optional<String> id){
return "ID: " + id.orElseGet(() -> "not provided");
}
이 경우 필수 속성 을 지정할 필요가 없습니다 .
요청 매개 변수가 제공되지 않으면 기본값이 사용됩니다.
http://localhost:8080/api/foos
----
ID: not provided
5. 요청 매개 변수의 기본값
defaultValue 속성 을 사용하여 기본값을 @RequestParam 으로 설정할 수도 있습니다 .
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(defaultValue = "test") String id) {
return "ID: " + id;
}
이처럼 , 필요한 = false를 사용자가 더 이상 필요가 매개 변수를 제공 할 수 있다는 점에서 :
http://localhost:8080/api/foos
----
ID: test
하지만 여전히 제공 할 수 있습니다.
http://localhost:8080/api/foos?id=abc
----
ID: abc
defaultValue 속성 을 설정할 때 required 는 실제로 false로 설정됩니다 .
6. 모든 매개 변수 매핑
Map을 사용하여 이름 이나 개수를 정의하지 않고도 여러 매개 변수를 가질 수도 있습니다 .
@PostMapping("/api/foos")
@ResponseBody
public String updateFoos(@RequestParam Map<String,String> allParams) {
return "Parameters are " + allParams.entrySet();
}
그러면 전송 된 모든 매개 변수가 반영됩니다.
curl -X POST -F 'name=abc' -F 'id=123' http://localhost:8080/api/foos
-----
Parameters are {[name=abc], [id=123]}
7. 다중 값 매개 변수 매핑
단일 @RequestParam 은 여러 값을 가질 수 있습니다.
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam List<String> id) {
return "IDs are " + id;
}
그리고 Spring MVC는 쉼표로 구분 된 id 매개 변수를 매핑합니다 .
http://localhost:8080/api/foos?id=1,2,3
----
IDs are [1,2,3]
또는 별도의 ID 매개 변수 List :
http://localhost:8080/api/foos?id=1&id=2
----
IDs are [1,2]
8. 결론
이 기사에서는 @RequestParam 을 사용하는 방법을 배웠습니다 .
예제의 전체 소스 코드는 GitHub 프로젝트 에서 찾을 수 있습니다 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-request-param
'Java' 카테고리의 다른 글
Spring에서 ThymeLeaf 및 FreeMarker 이메일 템플릿 사용 (0) | 2021.04.17 |
---|---|
Spring에서 지원되지 않는 요청 방법 (405) (0) | 2021.04.17 |
Spring @RequestParam 대 @PathVariable 어노테이션 (0) | 2021.04.17 |
Spring Boot로 Hikari 연결 풀 구성 (0) | 2021.04.16 |
JUnit5 @RunWith (0) | 2021.04.16 |