그날그날메모

Spring @RequestParam 어노테이션

Java

Spring @RequestParam 어노테이션

그날그날메모 2021. 4. 17. 02:20

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

다음으로 어노테이션의 속성 인 namevalue , 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