@RequestParam
= HTTP 요청으로 전달되는 파라미터를 메서드의 인자로 매핑해 주는 어노테이션
- 클라이언트에서 서버로 전달된 값을 컨트롤러 메서드에서 받아 처리 가능
- 주로 GET / POST 요청에서 쿼리 파라미터, 폼 데이터 수신 시 사용
= 파라미터 이름 지정. HTML의 폼 데이터나 URL 쿼리 스트링 파라미터 이름과 일치해야 함
= 요청에 해당 파라미터가 없을 경우 사용할 기본값 설정
=> 파라미터 없거나 값이 전달되지 않아도 기본값 사용해 메서드 실행 가능
= 파라미터 필수 여부 지정. 기본값은 true 설정, 없다면 오류 발생
=> false로 설정 시, 파라미터가 없어도 오류 발생 X - 기본값 사용 가능
1. GET 요청 처리
<HTML>
<ul>
<li><a href="param/send?name=Mike&age=25">a태그로 Parameter 송신</a></li>
<li><a href="param/send">a태그로 Parameter 없이 송신</a></li>
</ul>
@GetMapping("/param/send")
public String param(
@RequestParam(name="name", defaultValue="홍길동") String name,
@RequestParam(name="age", defaultValue="20") int age) {
System.out.println("name=" + name + ", age=" + age);
return "result";
}
param/send?name=Mike$age=25 URL로부터 name, age 파라미터 받아 처리defaultValue인 홍길동, 20 설정2. 폼 데이터 처리 (GET)
<h3>폼을 이용한 데이터의 전송(GET)</h3>
<form action="param/sendForm" method="GET">
<label for="userid">아이디: </label>
<input type="text" name="userid" placeholder="아이디 입력">
<label for="userpwd">비밀번호: </label>
<input type="password" name="userpwd" id="userpwd" placeholder="비밀번호 입력">
<br><br>
<input type="submit" value="전송">
<input type="reset" value="취소">
</form>
@GetMapping("/param/sendForm")
public String sendForm(
@RequestParam(name="userid", defaultValue="abc") String id,
@RequestParam(name="userpwd", defaultValue="korea") String userpwd
) {
System.out.println("userid= " + id + ", userpwd= " + userpwd);
return "result";
}
userId와 userpwd가 없을 경우 각각 기본값으로 abc, korea 설정3. 폼 데이터 처리 (POST)
<h3>폼을 이용한 데이터의 전송(POST)</h3>
<form action="param/sendForm" method="POST">
<label for="userid">아이디: </label>
<input type="text" name="userid" placeholder="아이디 입력">
<label for="userpwd">비밀번호: </label>
<input type="password" name="userpwd" id="userpwd" placeholder="비밀번호 입력">
<br><br>
<input type="submit" value="전송">
<input type="reset" value="취소">
</form>
@PostMapping("/param/sendForm")
public String sendForm2(
@RequestParam(name="userid", defaultValue="abc") String userid,
@RequestParam(name="userpwd", defaultValue="korea") String userpwd,
Model model
) {
System.out.println("userid= " + userid + ", userpwd= " + userpwd);
model.addAttribute("id", userid);
model.addAttribute("pwd", userpwd);
return "recieve"; // forward 방식
}
Model 객체에 useid와 userpwd를 추가해 뷰에서 사용할 수 있도록 전달 <receibe.html>
<h2>Model에서 데이터 꺼내기</h2>
<p>
html 문서는 Model의 값을 꺼낼 수 없다. <br>
그래서 thymeleaf 문법을 사용해야 한다.
</p>
<p>
아이디 : [[ ${id} ]] <br>
비밀번호: [[ ${pwd} ]]
</p>
1. ModelAttribute
2. RequestBody
= JSON, XML 등의 요청 본문(body) 데이터를 자바 객체로 매핑 시 사용
- 주로 REST API 개발 시 JSON 형식의 데이터 처리에 유용
@RequestBody 예시 코드
@PostMapping("/param/sendJson")
public String sendFormWithRequestBody(@RequestBody User user, Model model) {
System.out.println("userid= " + user.getUserid() + ", userpwd= " + user.getUserpwd());
model.addAttribute("id", user.getUserid());
model.addAttribute("pwd", user.getUserpwd());
return "recieve";
}
=> 클라이언트가 JSON 데이터를 POST요청으로 보냈을 때, User 객체로 변환해 줌
3. PathVariable
= GET 요청에서 경로 변수 사용해 파라미터 전달
=> URL 경로 자체에 변수를 포함시켜 처리하는 방법
@PathVariable 예시 코드
@GetMapping("/param/send/{userid}/{userpwd}")
public String sendFormWithPathVariable(
@PathVariable String userid,
@PathVariable String userpwd,
Model model) {
System.out.println("userid= " + userid + ", userpwd= " + userpwd);
model.addAttribute("id", userid);
model.addAttribute("pwd", userpwd);
return "recieve";
}
=> URL이 /param/send/abc/korea와 같이 경로에 포함된 데이터 직접 추출해 사용 가능