반응형
| 스프링 MVC 커맨드 객체(Command Object)
스프링에서 HttpServletRequest를 통해 HTTP 전송 정보를 얻는 방법은 다음과 같다.
@RequestMapping(value="/memLogin", method=RequestMethod.POST)
public String memLogin(Model model, HttpServletRequest request) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
}
하지만 이 방법은 속성값을 끄집어내기 위한 boiler-plate 코드가 생길 수 밖에 없는 단점이 있다. 따라서 스프링에서는 @RequestParam 어노테이션을 제공하여 메서드의 인수 부분에 HTTP로 들어오는 데이터를 바인딩하여 boiler-plate 코드를 어느정도 줄일 수 있게 하였다.
@RequestMapping(value="/memLogin", method=RequestMethod.POST)
public String memLogin(Model model,
@RequestParam("memId") String memId,
@RequestParam("memPw") String memPw) {
Member member = service.memberSearch(memId, memPw);
}
그러나 @RequestParam 어노테이션을 사용하는 방법도 한계가 있다. HTTP에서 들어오는 데이터의 각 속성들이 적으면 @RequestParam으로 커버가 가능하겠지만 이것보다 많은 6개 10개 혹은 그 이상의 속성들이 들어오게되면 @RequestParam들을 하나하나 명시해서 처리해야되므로 매우 까다로워진다.
따라서 스프링에서는 커맨드 객체(Command Object)를 지원하여 HTTP에서 들어오는 각 속성값들을 자동적으로 커맨드 객체에 바인딩하여 처리할 수 있게 하였다.
// MemPhone까지 하면 6개의 속성이 전달된다. 하지만 커맨드 객체를 이용하여
// @RequestMapping이나 getParameter로 처리하지 않아도 쉽게 처리 가능하다.
public class Member {
private String memId;
private String memPw;
private String memMail;
private MemPhone memPhone;
public String getMemId() {
return memId;
}
public void setMemId(String memId) {
this.memId = memId;
}
public String getMemPw() {
return memPw;
}
public void setMemPw(String memPw) {
this.memPw = memPw;
}
public String getMemMail() {
return memMail;
}
public void setMemMail(String memMail) {
this.memMail = memMail;
}
public MemPhone getMemPhone() {
return memPhone;
}
public void setMemPhone(MemPhone memPhone) {
this.memPhone = memPhone;
}
}
public class MemPhone {
private String memPhone1;
private String memPhone2;
private String memPhone3;
public String getMemPhone1() {
return memPhone1;
}
public void setMemPhone1(String memPhone1) {
this.memPhone1 = memPhone1;
}
public String getMemPhone2() {
return memPhone2;
}
public void setMemPhone2(String memPhone2) {
this.memPhone2 = memPhone2;
}
public String getMemPhone3() {
return memPhone3;
}
public void setMemPhone3(String memPhone3) {
this.memPhone3 = memPhone3;
}
}
// 커맨드 객체인 Member만 인수로 받아 데이터를 쉽게 처리할 수 있다.
@RequestMapping(value="/memJoin", method=RequestMethod.POST)
public String memJoin(Member member) {
service.memberRegister(member);
return "memJoinOk";
}
반응형
'Spring > Spring 입문 - 개념 및 핵심' 카테고리의 다른 글
[Spring] 스프링 세션, 쿠키 구현(Spring Session, Cookie) (0) | 2018.12.07 |
---|---|
[Spring] @ModelAttribute 및 중첩 커맨드 객체, Model & ModelAndView (3) | 2018.12.06 |
[Spring] 스프링 서비스 & DAO 객체 구현(Spring Service & DAO Implementation) (0) | 2018.12.05 |
[Spring] 이클립스(Eclipse) 스프링(Spring) MVC 프로젝트 구조 및 로직 흐름 (0) | 2018.12.02 |
[Spring] Eclipse 톰캣(Tomcat) 연동 및 STS 설치, Spring MVC 프로젝트 생성 (0) | 2018.12.02 |
이 글을 공유하기