상세 컨텐츠

본문 제목

SpringMVC - @ModelAttribute (메소드 레벨)

프레임워크/Spring Boot

by 최승호 2022. 6. 1. 12:00

본문

https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-modelattrib-methods

 

Web on Servlet Stack

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more com

docs.spring.io

[참고] 매개변수 레벨의 @ModelAttribute : https://sesoc.tistory.com/48

@ModelAttribute 어노테이션 - 메소드 레벨

@RequestMapping 메소드의 매개변수는 모델로부터 객체를 만들거나 접근할 수 있고 WebDataBinder를 통해 해당 객체를 request에 바인딩 한다.

@Controller나 @ControllerAdvice 클래스내 메소드 레벨의 어노테이션으로 @RequestMapping 메소드를 호출하기 전에 모델을 초기화 할 수 있다.

@RequestMapping 메소드에서 리턴되는 값은 model 속성이다.

 

컨트롤러에는 여러 @ModelAttribute 메소드가 있을 수 있고 @RequestMapping 메소드 보다 먼저 호출된다. 또한 @ControllerAdvice를 통해 컨트롤러 간에 공유도 가능하다.

ModelAttributeController.java

@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;
}

findMemberModel.html

<!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의 리턴 값이 모델의 속성으로 동작한다. 따라서 별도로 모델에 담지 않아도 뷰에서 모델을 참조할 수 있다.

fimdMember.html

<!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 Boot' 카테고리의 다른 글

Spring MVC @ResponseEntity  (0) 2022.05.31
Spring MVC @ResponseBody  (0) 2022.05.30
Spring MVC @RequestBody  (0) 2022.05.26

관련글 더보기

댓글 영역