2024. 10. 9. 18:29ㆍSpring Framework/Web on Servlet Stack
@RequestParam
애노테이션은 서블릿 요청 파라미터(쿼리 파라미터 또는 폼 데이터)를 컨트롤러 메서드의 아규먼트와 바인딩하는 데 사용됩니다. 이를 통해 클라이언트가 요청한 URL이나 폼 데이터에 포함된 값을 쉽게 메서드로 전달할 수 있습니다.
@RequestParam
기본 사용법
@RequestParam
을 사용하여 요청 파라미터를 메서드 아규먼트에 바인딩하는 기본적인 예시는 다음과 같습니다.
컨트롤러 예시
@Controller
@RequestMapping("/pets")
public class EditPetForm {
@GetMapping
public String setupForm(@RequestParam("petId") int petId, Model model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
}
위 코드에서 @RequestParam("petId")
는 클라이언트가 petId
라는 쿼리 파라미터로 전달한 값을 setupForm
메서드의 petId
파라미터에 바인딩합니다. 예를 들어, GET /pets?petId=5
라는 요청이 들어오면 petId
파라미터는 5로 설정됩니다.
@RequestParam
기본 동작
기본적으로 @RequestParam
으로 선언된 메서드 파라미터는 필수입니다. 즉, 클라이언트가 해당 파라미터를 전달하지 않으면 오류가 발생합니다. 그러나, 파라미터가 선택 사항인 경우, @RequestParam(required = false)
로 설정하거나, java.util.Optional
을 사용하여 선택적으로 처리할 수 있습니다.
선택적 파라미터 예시
@GetMapping
public String setupForm(@RequestParam(value = "petId", required = false) Integer petId, Model model) {
if (petId != null) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
} else {
// petId가 없을 경우 처리
model.addAttribute("message", "No pet ID provided");
}
return "petForm";
}
위 코드에서 petId
파라미터는 선택 사항이므로, 요청에 petId
가 없으면 null
이 할당됩니다.
타입 변환
@RequestParam
을 사용하여 기본적으로 문자열 파라미터를 메서드 아규먼트에 바인딩하지만, Spring은 자동으로 타입 변환을 수행합니다. 예를 들어, int
, double
, boolean
등의 기본 타입 또는 다른 객체 타입으로 변환이 가능합니다.
배열 및 리스트 처리
파라미터가 여러 개일 경우 배열이나 리스트로 처리할 수도 있습니다. 동일한 파라미터 이름이 여러 번 전달되는 경우, 아래와 같이 배열로 받을 수 있습니다.
@GetMapping("/search")
public String searchPets(@RequestParam("type") String[] types, Model model) {
model.addAttribute("types", types);
return "searchResults";
}
이 경우, 요청 URL이 /search?type=dog&type=cat
과 같이 여러 개의 type
파라미터를 포함할 때, types
배열에 dog
와 cat
값이 들어갑니다.
맵(Map) 사용
@RequestParam
을 Map<String, String>
또는 MultiValueMap<String, String>
으로 선언하면, 요청 파라미터 이름과 값을 모두 받아올 수 있습니다. 이렇게 하면 모든 요청 파라미터를 한 번에 처리할 수 있습니다.
@PostMapping(path = "/process", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String processForm(@RequestParam MultiValueMap<String, String> params) {
for (String key : params.keySet()) {
System.out.println("Key: " + key + ", Value: " + params.get(key));
}
return "formProcessed";
}
위 코드에서 params
는 폼에서 전달된 모든 파라미터를 포함한 맵입니다. 각 파라미터 이름이 맵의 키가 되고, 값은 해당 파라미터의 값입니다.
@RequestParam
은 선택 사항
@RequestParam
애노테이션은 선택적으로 사용할 수 있습니다. 기본적으로 단순 타입(문자열, 숫자 등)인 메서드 파라미터는 @RequestParam
이 생략된 경우에도 자동으로 쿼리 파라미터로 처리됩니다. 예를 들어, 아래와 같은 메서드는 @RequestParam
없이도 page
파라미터를 처리할 수 있습니다.
@GetMapping("/list")
public String listPets(int page, Model model) {
// 페이지 번호를 기반으로 리스트 로직 처리
model.addAttribute("page", page);
return "petList";
}
위 경우, GET /list?page=2
라는 요청이 오면 page
파라미터는 2로 자동 바인딩됩니다.
요약
@RequestParam
은 쿼리 파라미터나 폼 데이터를 메서드 아규먼트로 바인딩하는 데 사용됩니다.- 기본적으로 필수 파라미터로 동작하지만,
required=false
로 설정하거나Optional
을 사용해 선택적으로 만들 수 있습니다. - 배열, 리스트, 맵을 사용하여 여러 파라미터 값을 처리할 수 있습니다.
- 기본적으로 단순 타입 파라미터는
@RequestParam
을 생략해도 자동으로 처리됩니다.
샘플 코드
@Controller
@RequestMapping("/pets")
public class EditPetForm {
@GetMapping
public String setupForm(@RequestParam(value = "petId", required = false) Integer petId, Model model) {
if (petId != null) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
} else {
model.addAttribute("message", "No pet ID provided");
}
return "petForm";
}
@PostMapping(path = "/process", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String processForm(@RequestParam MultiValueMap<String, String> params) {
for (String key : params.keySet()) {
System.out.println("Key: " + key + ", Value: " + params.get(key));
}
return "formProcessed";
}
}
이 코드를 통해 다양한 방법으로 요청 파라미터를 처리할 수 있습니다.
'Spring Framework > Web on Servlet Stack' 카테고리의 다른 글
Mapping Requests (0) | 2024.10.09 |
---|---|
Declaration (1) | 2024.10.09 |
Controller Advice (0) | 2024.10.09 |
Exceptions (0) | 2024.10.09 |
Validation (0) | 2024.10.09 |