다음 4가지의 폼 정보를 서버에 전송한다고 해보자

  • email
  • name
  • password
  • confirmPassword

 

폼 전송 요청을 처리하는 컨트롤러는 각각의 요청 파라미터를 가져오기 위해 다음과 같은 코드를 사용할 수 있다.

@PostMapping("/register")
public String handleRegister(HttpServletRequest request) {
    String email = request.getParameter("email");
    String name = request.getParameter("name");
    String password = request.getParameter("password");
    String confirmPassword = request.getParameter("confirmPassword");
    
    RegisterRequest regReq = new RegisterRequest();
    regReq.setEmail(email);
    regReq.setName(name);
    regReq.setPassword(password);
    regReq.setConfirmPassword(confirmPassword);
}

 

만약 폼 전송으로 넘어온 파라미터의 개수가 40개라면 위의 코드와 같이 작성한다면 몇 줄을 적어야할까..??

스프링은 이런 단순 노가다를 없애기 위해 요청 파라미터의 값을 커맨드 객체에 담아주는 기능을 제공한다.

@PostMapping("/register")
public String handleRegister(RegisterRequest regReq) {

    // 요청 파라미터로 넘어온 모든 값을 regReq 객체에 담아준다.
    // do something ~~
    
}

 

커맨드 객체라고 특별한건 없다. 위와 같이 요청 매핑이 적용된 메서드의 파라미터에 기입해주면 된다.

스프링은 커맨드 객체의 setter를 이용해 값을 담아주는 기능을 하는거라서 커맨드 객체는 요청 파라미터의 이름과 똑같은 setter가 있어야한다. 예를 들어, 위의 RegisterRequest 클래스에는 setEmail(), setName(), setPassword(), setConfirmPassword() 메서드가 있어야 한다.

 

 

 

뷰 JSP 코드에서 커맨드 객체 사용하기


가입할 때 사용한 이메일 주소와 이름을 회원가입 완료 화면에서 보여주면 사용자에게 조금 더 친절하게 보일 것이다. JSP의 표현식을 사용해서 정보를 표시해도 되지만, 커맨드 객체를 이용해 정보를 나타낼 수도 있다.

<body>

${ registerRequest.name }님 회원가입을 완료하였습니다.

<a href="<c:url value='/main'/>"> 메인 화면으로 이동하기 </a>

</body

 

스프링 MVC는 커맨드 객체의 클래스 이름과 동일한 속성 이름을 사용해서 커맨드 객체를 뷰에 전달한다.

(이 때, 커맨드 객체 클래스명의 맨 앞글자는 소문자로 바꿈)