반응형

[Spring] 스프링(Spring) MVC 커맨드 객체(Command Object) 및 @RequestParam, HttpServletRequest

반응형

| 스프링 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";
}


반응형

이 글을 공유하기

댓글

Designed by JB FACTORY