728x90
메서드에 붙은 @ModelAttribute
여러 컨트롤러에서 같은 데이터를 모델에 공통적으로 넣을 때 데이터를 반환하는 메서드를 만들고, @ModelAttribute 애노테이션을 해당 메서드에 사용하여 코드 중복을 제거할 수 있습니다.
예를 들어 다음과 같은 컨트롤러 클래스가 있다고 하겠습니다.
@Controller
public class HelloController {
@GetMapping("/hello1")
public String hello1(Model model) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
model.addAttribute("list", list);
return "hello1";
}
@GetMapping("/hello2")
public String hello2(Model model) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
model.addAttribute("list", list);
return "hello2";
}
@GetMapping("/hello1")
public String hello3(Model model) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
model.addAttribute("list", list);
return "hello3";
}
}
hello1, hello2, hello3 메서드를 보면 셋다 같은 원소를 가진 리스트를 모델에 담고 있는 것을 볼 수 있습니다.
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
model.addAttribute("list", list);
이 경우 리스트를 반환하는 메서드를 만들고 해당 메서드에 @ModelAttribute 애노테이션을 사용하여 리스트를 만들고 모델에 전달하는 코드 중복을 제거할 수 있습니다.
@Controller
public class HelloController {
//옵션으로 전달된 문자열이 model에 담을때 사용할 키 값이 된다.
@ModelAttribute("list")
public List<String> list() {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
return list;
}
@GetMapping("/hello1")
public String hello1(Model model) {
return "hello1";
}
@GetMapping("/hello2")
public String hello2(Model model) {
return "hello2";
}
@GetMapping("/hello1")
public String hello3(Model model) {
return "hello3";
}
}
hello1, hello2, hello3 요청이 어디로 들어오든 간에 자동으로 list()의 반환 값이@ModelAttribute의 value(name) 속성 값을 키로 하여 model에 담기게 됩니다.
참고
'Spring' 카테고리의 다른 글
[스프링 MVC] 요청 파라미터 조회하기 - @RequestParam, @ModelAttribute (0) | 2021.07.07 |
---|---|
[스프링] 프록시(Proxy) (0) | 2021.03.08 |
[스프링] 의존관계 조회(Dependency Lookup) : ObjectFactory, ObjectProvider, JSR-330 Provider (0) | 2021.03.08 |
스프링 @Autowired : 같은 타입의 빈이 여러개라면?(@Qualifier, @Primary) (0) | 2021.02.26 |
[스프링] 빈 초기화, 소멸 메소드 사용하기 (0) | 2021.01.12 |
댓글