본문 바로가기
Programming/Spring

@ModelAttribute

by hongchii 2022. 1. 2.
728x90
반응형

@ModelAttribute는 적용 대상을 Model의 속성으로 자동 추가 (Model에 자동저장)해주는 애너테이션이다.

반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능하다.

 

 

1. 매개변수

@RequestMapping("/getYoilMVC5") 
//public String main(@ModelAttribute("myDate") MyDate date, Model model){// 아래와 동일
public String main(@ModelAttribute MyDate date, Model model) { 

	char yoil = getYoil(date);

	model.addAttribute("myDate", date);
	model.addAttribute("yoil", yoil);

	return "yoil";
}

 

Mydate앞에 ModelAttribute를 적어주면 Model에 자동 저장이 된다.

그래서 model.addAttribute("myDate", date); 이렇게 저장 할 필요가 없다.

@ModelAttribute("myDate")처럼 Key의 이름을 적어줘야하지만 생략하면 @ModelAttribute MyDate에서 Mydate의 첫글자를 소문자로 한 mydate를 Key로 사용한다.

 

Key Value
"mydate" date주소

 

2. 반환타입

private @ModelAttribute("yoil") char getyoil(MyDate date){
	return getYoil(date.getYear(), date.getMonth(), date.getDay());
}

반환타입 앞에도 @ModelAttribute를 사용할 수 있다.

호출 결과를 Model에 저장한다. @ModelAttribute("yoil")이 Key가 된다. 

만약 메서드를 호출한 결과가 "수"라면 Key "yoil" Value "수"로 저장된다.

Key Value
"mydate" date주소
"yoil" "수"

 

그럼 아래와 같이 코드가 간결해 진다.

@RequestMapping("/getYoilMVC5") 
//public String main(@ModelAttribute("myDate") MyDate date, Model model){// 아래와 동일
public String main(@ModelAttribute MyDate date, Model model) { 

	return "yoil";
}

 

 

 

MyDate같은 참조형 매개변수 앞에 @ModelAttribute를 붙일 수 있고, @ModelAttribute를 생략할 수 있다.

 

컨트롤러 매개변수

@RequestParam은 기본형, String일 때 생략되어 있다고 보면 된다.

@ModelAttribute은 참조형일 때 생략되어 있다고 보면된다.

참조형일때는 @RequestParam을 붙일 수 없다. 여러개의 값이 바인딩 되는 것이기 때문에.

기본형이나 String같은 경우엔 View에서 바로 사용할 수 있기 때문에 Model에 저장 할 필요가 없다.

728x90
반응형

댓글