[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";
}
'Spring Framework > Spring 입문 - 개념 및 핵심' 카테고리의 다른 글
[Spring] 스프링 프록시 설정을 이용하여 프로토타입 빈 업데이트하기(Spring Proxy Configuration) (0) | 2021.01.14 |
---|---|
[Spring] 스프링 리다이렉트, 인터셉터(Spring Redirect, Interceptor) (0) | 2021.01.14 |
[Spring] 스프링 세션, 쿠키 구현(Spring Session, Cookie) (0) | 2021.01.14 |
[Spring] @ModelAttribute 및 중첩 커맨드 객체, Model & ModelAndView (0) | 2021.01.14 |
[Spring] 스프링 서비스 & DAO 객체 구현(Spring Service & DAO Implementation) (0) | 2021.01.14 |
[Spring] 이클립스(Eclipse) 스프링(Spring) MVC 프로젝트 구조 및 로직 흐름 (0) | 2021.01.14 |
[Spring] Eclipse 톰캣(Tomcat) 연동 및 STS 설치, Spring MVC 프로젝트 생성 (0) | 2021.01.14 |
[Spring] 스프링(Spring) MVC 아키텍처/설계 구조 (0) | 2020.12.21 |