스프링 프레임워크에서 제공하는 어노테이션 중 하나로, HTTP 요청 파라미터 값을 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용한다.
검색어를 입력받아 해당 검색어에 맞는 결과를 반환하는 경우, 다음과 같이 @RequestParam
을 사용한다.
@GetMapping("/search")
public String search(@RequestParam("query") String query) {
...
}
위 코드에서 @RequestParam("query") String query
는 HTTP 요청의 파라미터 중 query
라는 이름의 값을 String
타입의 query
매개변수로 받아온다.
예를 들어 /search?query=abcd
이라는 요청이 들어오면, query
매개변수는 "abcd"이라는 값을 가지게 된다.
다음과 같이 required
속성을 false
로 설정하면 해당 파라미터가 없어도 에러를 발생시키지 않는다.
@GetMapping("/search")
public String search(@RequestParam(value = "query", required = false) String query) {
...
}
이렇듯 @RequestParam
을 사용하면 HTTP 요청의 파라미터를 간편하게 처리하여 동적인 웹 페이지를 구현할 수 있다.
❗form에서 값을 받아오는 경우, @RequestParam의 value 값은 html 파일에서의 입력 항목과 이름이 동일해야 한다.
다음 예시를 보자.
form.html
<form th:action="@{/question/create}" method="post">
<div class="mb-3">
<label for="subject" class="form-label">제목</label>
<input type="text" name="title" id="title" class="form-control">
</div>
<div class="mb-3">
<label for="content" class="form-label">내용</label>
<textarea name="content" id="content" rows="10"></textarea>
</div>
<input type="submit" value="등록하기" class="btn btn-primary my-2">
</form>
controller.java
@GetMapping("/create")
public String questionCreate(){
return "question_from";
}
@PostMapping("/create")
public String questionCreate(@RequestParam(value = "title") String title, @RequestParam(value = "content") String content){
...
return "redirect:/question/list";
}
form.html에서 입력 항목으로 사용한 title, content와 RequestParam의 value 값을 동일하게 작성한 것을 확인할 수 있다.