@ModelAttribute
메소드 파라미터 혹은 메소드 리턴 값을 명명된 model attribute에 바인딩 한다.
1. 지정한 객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법으로 입력해준다.
(객체 생성, setter 이용하여 주입)
2. Model 에 @ModelAttribute
로 지정한 객체를 자동으로 넣어준다.
ex) moel.addAttribute("temp", temp);
자동 추가
@GetMapping 에서는 왜 @ModelAttribute 를 사용하나요?
BeanValidation 을 활용할 수 있다.
이러한 방법은 사용자가 입력할 수 있는 빈 객체를 모델에 사전에 추가하여, 템플릿 엔진이 해당 객체를 참조할 수 있게 한다.
-> 에러 발생 시, 입력 값과 에러 메시지를 폼에 유지시켜줄 수 있다.
ex) 로그인 요청 시 @GetMapping
에서도 LoginForm 을 @ModelAttribute
로 받아서 로그인 실패 시 입력 값을 유지 시킨다.
사용자가 입력할 수 있는 빈 객체를 모델에 사전에 추가하여, 템플릿 엔진이 해당 객체를 참조!!
어떻게 사용하나요?
@Get("/")
public String practice(@ModelAttribute Member member) {
System.out.println("멤버 이름 = ", member.getName());
//model.addAttribute("member", member); 자동 추가
return "home";
}
단순 데이터 타입을 복합 데이터 타입의 객체로 받아오거나 해당 객체를 새로 생성한다.
@RequestParam , @PathVariable 과의 차이는 뭔가요?
@RequestParam 의 경우
@Get("/")
public String practice(@RequestParam Long id, @RequestParam String name, Model model) {
System.out.println("멤버 아이디 = ", id);
System.out.println("멤버 이름 = ", name);
model.addAttribute("memberId", id);
return "home";
}
단순 데이터 타입들이 많은 경우 번거로워진다.
model 도 직접 입력해줘야 하며 단순 데이터 타입들을 전부 따로 입력받아야한다.
@RequestParam 의 경우 필수로 입력받아야 하는게 기본 설정이기 때문에 required = false 를 해주지 않는 이상 필수로 해당 값을 받아야 한다.
아래 설명할 @PathVariable과 비교를 하자면 @RequestParam은 주로 쿼리스트링으로 데이터를 받는 경우에 사용한다.
@PathVariable 의 경우
@Get("/member/{id}")
public String practice(@PathVariable Long id, Model model) {
System.out.println("멤버 아이디 = ", id);
model.addAttribute("member", member);
return "home";
}
쿼리스트링으로 데이터를 받지 않으며 uri에 전달되는 데이터를 받아올 때 사용한다.
@RequestParam 과 달리 딱 하나만 사용 가능하다 ( X )
@PathVariable 도 여러개 사용 가능하다.
ex)
@Get("/member/{id}/article/{name}")
public String practice(@PathVariable Long id, @PathVariable String name, Model model) {
System.out.println("멤버 아이디 = ", id);
model.addAttribute("member", member);
return "home";
}
반드시 값을 가져야 한다.
헷갈렸던 부분
GET 매핑으로 로그인 폼 화면을 보여주는 코드에서 @ModelAttribute 를 사용하는 것이 이해가 가지 않아서 여러 자료를 찾아보다가 알게된 내용을 블로그에 정리하게 되었다.
앞에서 설명하였듯이 로그인 화면에서 입력받을 빈 객체를 미리 만들어서 모델에 올리고 유효성 검증을 실패 할 시 해당 객체를 이용하여 입력된 데이터를 유지하며 오류를 보여줄 수 있다. 이를 여러 방면으로 활용할 수 있을 것이라 생각한다.(고객 정보 자동완성 등등)
사용자가 입력할 수 있는 빈 객체를 모델에 사전에 추가하여, 템플릿 엔진이 해당 객체를 참조 한다.
템플릿 엔진이 클라이언트가 입력한 값을 참조하여 화면을 렌더링한다.
-> 유효성 검증을 실패해도 입력된 데이터를 유지할 수 있다.
'Spring' 카테고리의 다른 글
ArgumentResolver 와 ReturnValueHandler (0) | 2024.08.14 |
---|---|
Servlet 과 DispatcherServlet (0) | 2024.08.14 |
AOP 간단 요약 (0) | 2024.08.12 |
Spring Boot 에서 사용자와 데이터 교환 방법 (1) | 2024.06.30 |