Back-end/JAVA,Spring

[spring] 어노테이션이란? @modelAttribute

cheersHena 2019. 6. 4. 18:17
반응형

 

@ModelAttribute = command object 

 

이미지와 같이 @ModelAttribute는 클라이언트의 파라미터를 완벽하게 이해하고 있는 자바빈 객체 요구.

이 객체에 @ModelAttribute라는 어노테이션을 붙이면 자동으로 바인딩 해주고 중간과정은 모두 자동으로 생략해준다. 

@Controller 

public class HomeController {

@RequestMapping (value"/", method = RequestMethod.GET){



     . . . . 

}

}

위 예시보면 바인딩 과정이 코드에 전혀 나타나있지 않고 전달인자에 @ModelAttribute를 넣는 것만으로 모두 생각이 가능해졌다. 만약 이 코드를 서블릿으로 대체해 보자면 아래와 같다

 

public class HomeController extends HttpServlet{

private Static final long serialBersionUID = 1L; 

protected void doGet(HttpServletRequest request, HttpSerbletResponse response ) throws ServletExeption, IOExeption {

     

String param1 = request.getParameter("param1");
String param2 = request.getParameter("param2");

String param3 = request.getParameter("param3");

String param4 = request.getParameter("param4");



 . . .



}

}

(이처럼 과거에는 파라미터로 전송받는 데이터를 처리하고 DB에 넣는 과정이 상당히 까다로웠다. 

 

 

@ModelAttribute 사용법

 

1. 클라이언트가 전송할 파라미터를 하나씩 바인딩 할 수 있는 커맨드형 자바빈 클래스를 만들고, 파라미터의 이름과 커맨드 오브젝트의 프로퍼티 명을 맞춰준다. 그리고 해당 리소스를 처리할 컨트롤러를 만든 뒤 파라미터를 @ModelAttribute를 이용해 커멘드오브젝트에 바인딩 시켜주면 된다. 

 

ex)

 

public class Command {

String id;

String pw;

String name; 

.  .  . 



< input name ="id" />       ----->    public void setId(String id){ this.id = id; }

< input name ="pw" />       ----->   public void setPw(String pw){ this.id = pw; }

< input name ="name" />     ----->   public void setName(String name){ this.id = name; }



}

 

name="id"는 setId()메서드와 관계를 맺고 있다. 스프링은 이런 명명규칙만으로도 해당 폼에서 전송되는 파라미터와 커맨드 오브젝트의 관계를 이해할 수 있다. 

즉, 대입되는 커멘트 오브젝트만 있으면 나머지는 스프링컨테이너가 알아서 바인딩 과정을 처리해준다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형