[ Spring-Boot ] @Controller 에서 파라미터 받는 방법
날짜: 2024년 9월 2일
1. @RequestParam
@RequestParam
: 요청 파라미터 → 메서드 매개변수로 바인딩할 때 사용
- GET 요청의 쿼리 파라미터 처리할 때
- POST 요청의 폼 데이터를 처리할 때
1-1. GET 요청의 쿼리 파라미터 처리
GET /search?query=spring&sort=asc
서버에 search
라는 경로로 요청을 보내면서, query
와 sort
라는 두 개의 쿼리 파라미터를 전달
@Controller
public class SearchController {
@GetMapping("/search")
public String search(@RequestParam(name = "query") String query,
@RequestParam(name = "sort", required = false, defaultValue = "desc") String sort,
Model model) {
model.addAttribute("query", query);
model.addAttribute("sort", sort);
return "searchResults";
}
}
@RequestParam(name = "query") String query
:
URL의query
파라미터 값을 메서드의query
매개변수에 바인딩@RequestParam(name = "sort", required = false, defaultValue = "desc") String sort
:
URL의sort
파라미터 값을sort
매개변수에 바인딩- ⇒ 해당 파라미터는 선택사항, 값이 없을 경우 기본값으로
desc
가 설정
1-2. POST 요청의 폼 데이터 처리
POST 요청은 주로 데이터를 HTTP 요청 본문에 포함하여 전송하며, 특히 폼을 통해 데이터를 제출할 때 주로 사용한다.
이 경우 application/x-www-form-urlencoded
, multipart/form-data
와 같은 컨텐츠 타입이 사용
HTML 폼 예시
<form action="/register" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Register" />
</form>
사용자가 username
과 password
를 입력한 후 제출하면, 브라우저가 해당 데이터를 POST 요청으로 서버에 전송한다.
@RequestParam
을 사용한 POST 요청 처리 예시
@Controller
public class UserController {
@PostMapping("/register")
public String register(@RequestParam(name = "username") String username,
@RequestParam(name = "password") String password,
Model model) {
model.addAttribute("username", username);
model.addAttribute("password", password);
return "registrationSuccess";
}
}
@RequestParam(name = "username") String username
:
폼에서 전송된username
필드의 값을 메서드의username
매개변수에 바인딩@RequestParam(name = "password") String password
:
폼에서 전송된password
필드의 값을 메서드의password
매개변수에 바인딩
사용자가 폼을 제출 시
- POST 요청으로 전송된
username
과password
데이터가 메서드의 parameter로 전달
1-3. @RequestParam
의 다양한 속성
- name/value:
- HTTP 요청 파라미터의 이름을 지정.
- 생략할 경우, 메서드 매개변수 이름과 동일한 파라미터 검색
- required:
- 파라미터가 필수인지 여부를 지정.
- 기본값은
true
이며, 파라미터가 없으면MissingServletRequestParameterException
이 발생
- defaultValue:
- 파라미터가 없을 때 사용할 기본값을 지정.
- 이 값이 설정되면
required
는 자동으로false
로 간주.
1-4. 예외 처리
@RequestParam
에서 필수 파라미터가 누락되었을 때는 예외가 발생 가능
- 기본값 설정:
defaultValue
를 통해 기본값을 제공하여 예외를 방지할 수 있습니다. - 예외 처리: 컨트롤러에서
@ExceptionHandler
를 사용하여 예외를 처리할 수 있습니다.
2. @PathVariable
@PathVariable
은 URL 경로의 변수 값을 메서드 매개변수로 바인딩할 때 사용
RESTful URL 설계에서 주로 사용
사용 예시
@Controller
public class MyController {
@GetMapping("/user/{userId}")
public String getUser(@PathVariable("userId") Long userId, Model model) {
model.addAttribute("userId", userId);
return "userDetail";
}
}
@PathVariable("userId")
:
URL 경로에서{userId}
에 해당하는 값을 받아userId
매개변수에 바인딩
3. @RequestBody
@RequestBody
:
HTTP Request Body를 읽어와 자바 객체로 변환하여 메서드 매개변수로 바인딩할 때 사용.
⇒ 주로 JSON이나 XML 형식의 데이터를 처리할 때 사용
사용 예시
@Controller
public class MyController {
@PostMapping("/users")
public String createUser(@RequestBody User user, Model model) {
// User 객체는 요청 본문에서 생성
model.addAttribute("user", user);
return "userCreated";
}
}
@RequestBody
:- HTTP RequestBody을 읽어
User
객체로 변환. 이를 위해HttpMessageConverter
가 사용
4. @ModelAttribute
@ModelAttribute
:
Request Parameter, Form-Data를 객체로 바인딩하여 메서드 매개변수로 전달하거나, Model에 자동으로 추가하는 데 사용
POST 요청의 application/x-www-form-urlencoded
또는 multipart/form-data
타입의 데이터를 처리하는 경우에도 사용
사용 예시
@Controller
public class MyController {
@PostMapping("/register")
public String registerUser(@ModelAttribute User user, Model model) {
// User 객체는 요청 파라미터에서 생성
model.addAttribute("user", user);
return "registrationSuccess";
}
}
@ModelAttribute
:- Request Param을 바탕으로 객체를 생성하고, 해당 객체를 모델에 자동으로 추가합니다.
5. HttpServletRequest
와 HttpServletResponse
HttpServletRequest
와 HttpServletResponse
객체를 직접 사용하여 요청과 응답 처리 가능
⇒ 서블릿 API를 사용하여 더 낮은 수준의 HTTP 요청/응답 처리
사용 예시
@Controller
public class MyController {
@GetMapping("/request")
public String handleRequest(
HttpServletRequest request,
HttpServletResponse response) {
String param = request.getParameter("paramName");
response.setHeader("Custom-Header", "value");
return "requestHandled";
}
}
HttpServletRequest
:- 요청에서 파라미터를 직접 가져오거나, 요청 정보를 읽어올 때 사용
HttpServletResponse
:- 응답에 헤더를 설정하거나, 직접 응답을 작성할 때 사용
요약
- 단일 요청 파라미터 처리:
@RequestParam
- URL 경로 변수 처리:
@PathVariable
- 요청 본문 처리 (JSON 등):
@RequestBody
- 폼 데이터 처리:
@ModelAttribute
- 낮은 수준의 요청/응답 처리:
HttpServletRequest
,HttpServletResponse
'Spring & SpringBoot' 카테고리의 다른 글
Spring Boot 프로젝트에서의 Gradle 사용법과 동작 원리 (0) | 2025.05.04 |
---|