다음과 같이 작성된 html 페이지가 있다가 쳐보자.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>createMemberForm</title>
</head>
<body>
<div class="container">
<form action="/members/new" method="post"> <!--post 방식으로 데이터를 넘기면 @PostMapping으로 연결된다.
단순히 url을 입력하는 방식은 @GetMapping으로 넘어간다.-->
<div class="form-group">
<label for="name">이름</label>
<input type="text" id="name" name="name" placeholder="이름을 입력하세요">
</div>
<button type="submit">등록</button>
</form>
</div> <!--container-->
</body>
</html>
실제 모습은 아래와 같다.
위 코드의 form은 "post" 방식이다.
Spring은 이에 따라서 Controller 중에서 "/members/new" 인자를 가지고 있는 @PostMapping을 찾는다.
@PostMapping("/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
Spring이 form을 통해서 위와 같은 method를 찾았다고 가정해보자.
MemberForm class는 String name이라는 Field 변수를 가지고 있다. 물론 MemberForm에 getter, setter가 구현되어 있어야한다.
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
html 코드에서 <form> 태그 안에는 <input>이라는 element가 있다.
이는 'name'이라는 attribute를 가지고 있다.
이는 post 방식으로 데이터를 넘길 때, MemberForm form의 'name'의 값으로 user가 입력한 값이 값이 들어간다는 것을 의미한다.
이런식으로 Post 방식이 작동한다.