[참고] 매개변수 레벨의 @ModelAttribute : https://sesoc.tistory.com/48
@RequestMapping 메소드의 매개변수는 모델로부터 객체를 만들거나 접근할 수 있고 WebDataBinder를 통해 해당 객체를 request에 바인딩 한다.
@Controller나 @ControllerAdvice 클래스내 메소드 레벨의 어노테이션으로 @RequestMapping 메소드를 호출하기 전에 모델을 초기화 할 수 있다.
@RequestMapping 메소드에서 리턴되는 값은 model 속성이다.
컨트롤러에는 여러 @ModelAttribute 메소드가 있을 수 있고 @RequestMapping 메소드 보다 먼저 호출된다. 또한 @ControllerAdvice를 통해 컨트롤러 간에 공유도 가능하다.
@ModelAttribute
@GetMapping("/findMemberModel")
public void findMemberModel(@RequestParam String id, Model model) {
log.info("findMemberModel 실행");
// service 혹은 repository에서 member 찾기 임시코드
Member member = new Member();
member.setId("hong");
member.setName("홍길동");
model.addAttribute("member", member);
}
@ModelAttribute
@GetMapping("/findMember")
public Member findMember(@RequestParam String id) {
log.info("findMember 실행");
// service 혹은 repository에서 member 찾기 임시코드
Member member = new Member();
member.setId("hong");
member.setName("홍길동");
return member;
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>[ findMemberModel.html ]</h2>
<p th:text="'name(request scope) : ' + ${member.name}" ></p>
<p th:text="'name(session scope) : ' + ${session.member.name}" ></p>
</body>
</html>
메소드 레벨의 @ModelAttribute를 사용하면 @RequestMapping의 리턴 값이 모델의 속성으로 동작한다. 따라서 별도로 모델에 담지 않아도 뷰에서 모델을 참조할 수 있다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>[ findMember.html ]</h2>
<p th:text="'name(request scope) : ' + ${member.name}" ></p>
<p th:text="'name(session scope) : ' + ${session.member.name}" ></p>
</body>
</html>
Spring MVC @ResponseEntity (0) | 2022.05.31 |
---|---|
Spring MVC @ResponseBody (0) | 2022.05.30 |
Spring MVC @RequestBody (0) | 2022.05.26 |
댓글 영역