반응형
@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()메서드와 관계를 맺고 있다. 스프링은 이런 명명규칙만으로도 해당 폼에서 전송되는 파라미터와 커맨드 오브젝트의 관계를 이해할 수 있다.
즉, 대입되는 커멘트 오브젝트만 있으면 나머지는 스프링컨테이너가 알아서 바인딩 과정을 처리해준다.
반응형
'Back-end > JAVA,Spring' 카테고리의 다른 글
[JAVA]에러/예외처리란? Error/Exception Handling (0) | 2020.12.10 |
---|---|
스프링 시큐리티란? Spring Security (0) | 2020.10.07 |
[java spring] 스프링프레임워크 <form:form> 태그 사용법 (0) | 2019.05.30 |
[스프링]자바에서 설정파일(xml , properties.. ) 읽어들이기. (0) | 2019.05.30 |
[java] Enhanced For Loop 향상된 for문 이란? (0) | 2019.04.23 |