@ModelAttribute
적용 대상을 Model의 속성으로 자동 추가해주는 어노테이션 (Model에 자동 저장)
반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능하다.
예제 1 - 매개변수
기존에는 브라우저의 요청 값을 매개변수로 받아서 Model 객체를 통해서 매개변수를 저장했었다.
@RequestMapping("/testMVC")
public String main(User user, Model model) {
// 매개변수로 받은 user 객체를 Model에 저장
model.addAttribute("user", user);
// 작업 결과를 보여줄 뷰의 이름을 반환
return "userInfo";
}
Model에 저장하고자 하는 매개변수 앞에 @ModelAttribute를 붙이면 model.addAttribute메서드에 저장하지 않고도 결과를 보여줄 페이지에서 매개변수를 사용할 수 있다.
@RequestMapping("/testMVC")
// public String main(@ModelAttribute("user") User user) {
public String main(@ModelAttribute User user) { // 위와 동일
// 매개변수로 받은 user 객체를 Model에 저장
//model.addAttribute("user", user);
// 작업 결과를 보여줄 뷰의 이름을 반환
return "userInfo";
}
예제 2 - 반환타입
@RequestMapping("/testMVC")
public String main(@ModelAttribute User user) {
//String userInfo = getUserInfo(user);
// 매개변수로 받은 user 객체를 Model에 저장
//model.addAttribute("user", user);
// 작업 결과를 보여줄 뷰의 이름을 반환
return "userInfo";
}
private @ModelAttribute("userInfo") String getUserInfo(User user) {
return user.toString();
}
유저의 정보를 toString으로 보여주는 getUserInfo 메서드의 반환타입 앞에 @ModelAttribute를 적으면 결과를 model에 자동으로 저장시켜준다.
예제 3 - 생략 가능 여부
참조형 매개변수 앞에는 @ModelAttribute를 생략하고 사용할 수 있다.
@RequestMapping("/testMVC")
public String main(User user, Model model) {
// 매개변수로 받은 user 객체를 Model에 저장
// model.addAttribute("user", user); 참조형 매개변수는 바로 model에 저장된다.
// 작업 결과를 보여줄 뷰의 이름을 반환
return "userInfo";
}
WebDataBinder
브라우저를 통해서 요청받은 값이 실제 서버의 객체에 바인딩 될 때 중간 역할을 한다. 크게 두 가지 작업을 진행한다.
먼저 타입 변환을 해주고 그 후 데이터 검증을 실시 한다. 변환 결과나 에러는 BindingResult에 저장한다.
예제
@ExceptionHandler
public String error(Exception exception, BindingResult result) {
exception.printStackTrace();
FieldError error = result.getFieldError();
System.out.println(error.getField());
System.out.println(error.getDefaultMessage());
return "errorPage";
}
@RequestMapping("/testMVC")
public String main(@ModelAttribute User user) {
// 작업 결과를 보여줄 뷰의 이름을 반환
return "userInfo";
}
BindingResult 객체를 통해 에러객체를 받을 수 있고 에러 정보를 확인할 수 있다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] Redirect와 Forward에 대해 알아보자 (0) | 2022.01.02 |
---|---|
[Spring] @GetMapping과 @PostMapping (0) | 2021.12.31 |
[Spring] @RequestParam에 대해 알아보자 (0) | 2021.12.31 |
[Spring] Servlet/JSP Filter에 대해 알아보자 (0) | 2021.12.31 |
[Spring] Servlet/JSP URL패턴과 DispatcherServlet (0) | 2021.12.30 |