@ModelAttribute

Yuno·2024년 8월 19일
0

Spring MVC에서 컨트롤러 메서드의 매개변수나 반환 값을 뷰(View) 에 전달하기 위해 사용되는 어노테이션.
컨트롤러의 매개변수로 전달되는 객체를 초기화하거나, 모델(Model) 에 데이터를 바인딩 할 때 사용됨


👉 주요 사용 방법

  1. 메서드 레벨 : 모델에 데이터를 추가하여 뷰에서 사용할 수 있도록 함
  2. 파라미터 레벨 : HTTP 요청으로부터 전달된 데이터를 특정 객체에 바인딩함

👉 메서드 레벨에서의 사용

메서드 레벨에서 @ModelAttribute 를 사용하면 해당 메서드에서 반환된 객체가 자동으로 모델에 추가되어 뷰에서 사용될 수 있음
공통 데이터 추가

@Controller
public class UserController {
	
    @ModelAttribute("commonData")
    public String addCommonData() {
    	return "This is common data";
    }
    
    @GetMapping("/user")
    public String getUserPage(Model model) {
    	// "commonData" 가 이미 모델에 추가되어 뷰에서 사용 가능
        model.addAttribute("userData", "User-specific data");
        return "userPage";
    }
}

addCommonData() 메서드는 "commonData" 라는 이름으로 모델에 데이터를 추가하며, 이는 모든 뷰에서 사용 가능함


👉 파라미터 레벨에서의 사용

@ModelAttribute 는 컨트롤러 메서드의 매개변수에 사용되어, HTTP 요청으로부터 전달된 데이터를 특정 객체에 바인딩 함
폼 데이터 바인딩

@Controller
public class UserController {
	
    @GetMapping("/register")
    public String showReistrationForm(Model model) {
    	model.addAttribute("userForm", new UserForm());
        return "register";
    }
    
    @PostMapping("/register")
    public String registerUser(@ModelAttribute UserForm userForm) {
    	 // userForm 객체는 폼 데이터로 자동으로 채워짐
         // 등록 로직 수행
         return "registrationSuccess";
    }
}

여기서 UserForm 클래스는 다음과 같이 정의될 수 있음

public class UserForm {
	private String username;
    private String password;
    // getters and setters
}

@ModelAttributeUserForm 객체에 폼 데이터를 바인딩함. 폼에서 전송된 usernamepassword 값이 UserForm 객체의 필드에 자동으로 매핑됨


👉 @RequestMapping 과 함께 사용

경로 변수 바인딩

@Controller
@RequestMapping("/users")
public class UserController {
	
    @GetMapping("/{id}")
    public String getUser(@PathVariable("id") Long userId, @ModelAttribute("user") User user) {
    	// user 객체에 요청 파라미터가 바인딩됨
        // userId 로 사용자 데이터를 로드하여 user 객체에 설정할 수 있음
        return "userDetail";
	}
}
profile
Hello World

0개의 댓글