Spring DataBinding (1) - HTML Form
client에서 server로 request할 시에 여러가지 데이터를 담아서 보내는 경우가 많은데,
controller에서는 이 담겨온 정보를 plain text로 일일이 받아서 사용하기 보다는
객체로 DataBinding을 하여 바로 쓰는 것이 코드가 간결하고 사용하기도 편하다.
여러가지 경우에 대해서 DataBinding을 생각해 볼 수 있다.
HTML Form Data to Object
HTML Form Data를 전송했을 때, Controller에서 Object로 바로 받아서 사용할 수 있다.
- HTML Form
<form>
...
<input class="control" name="name" type="text" />
<input class="control" name="email" type="text" />
<textarea class="control" name="text" rows="10" cols="10">
...
</form>
HTML form에서 값을 입력할 경우에는 <input>태그의 name 속성의 값이 바인딩 하려는 객체에 대한 클래스의 변수명과 같이 "name", "email", "text"와 매치가 되게 작성하여야 한다.
- Java Class
public class Offer {
...
private String name;
private String email;
private String text;
...
}
즉, Offer 클래스에는 name, email, text라는 이름의 필드가 존재한다.
- Controller
@RequestMapping("/docreate")
public String doCreate(Model model, Offer offer) {
return "offercreated";
}
Controller는 그냥 받으면 된다.
HTML Form Data to DataType
(using @RequestParam)
HTML Form에서 보낸 Data를, 일일이 DataType을 지정하여 받을 수 있다.
- HTML Form
<form>
...
<input class="control" name="name" type="text" />
<input class="control" name="email" type="text" />
<textarea class="control" name="text" rows="10" cols="10">
...
</form>
- Controller
@RequestMapping("/docreate")
public String doCreate(Model model, @RequestParam String name, @RequestParam String email, @RequestParam String text) {
return "offercreated";
}
@RequestParam을 써서 자료형으로 받을 수도 있다. 변수명은 HTML Form의 'name' Attribute의 값과 동일해야 한다.