Web

Ch14. MVC 4 : @PathVariable

tose33 2022. 7. 26. 15:12

경로의 일부가 고정되어 있지 않고 달라질때 매핑 메서드에서 이를 어떻게 처리 할수 있을까?

 

예를들어 다음 url을 보자.

http://localhost:8080/sp5-chap14/members/10

마지막에 10이 멤버의 번호를 나타내고 각 맴버 경로마다 해당 숫자가 달라진다고 하면, 컨트롤러에서 해당 하는 번호를 어떻게 처리할수 있을까?

 

 

MemberDetailController.java

package spring;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Controller
public class MemberDetailController 
{
	private MemberDao memberDao;
	
	public void setMemberDao(MemberDao memberDao)
	{
		this.memberDao = memberDao;
	}
	
	@GetMapping("/members/{id}")
	public String detail(@PathVariable("id") Long memId, Model model) 
	{
		Member member = memberDao.selectById(memId);
		if(member == null) throw new MemberNotFoundException();
		
		model.addAttribute("member", member);
		return "member/memberDetail";
	}

}

detail() 메서드를 보면 매핑 경로에 중괄호 {id} 가 있는데.

이렇게 중괄호로 둘러 쌓인 부분을 경로 변수 라고 한다. 

이 경로 변수에 해당하는 값은 같은 경로 변수 이름을 지정한 @PathVariable 파라미터에 전달된다. 

 

즉 여기서 전달된 요청 경로가 /members/10 이라면, 경로 변수는 10이 되고, Long memId의 값이 10이 된다. 

경로 변수 10은 String 타입이지만, Long memId에 맞춰 타입은 변환된다. 

 

 

MemberDetailController를 빈 객체로 추가하고 

ControllerConfig.java

package config;

// ...

@Configuration 
public class ControllerConfig 
{
	// ...
	// MemberConfig.java에서 빈 객체로 추가됨       
	@Autowired
	private MemberDao memberDao;
    
    // ...
    
	@Bean
	public MemberDetailController memberDetailController() 
	{
		MemberDetailController controller = 
				new MemberDetailController();
		controller.setMemberDao(memberDao);
		return controller;
	}
	
}

 

 

결과 뷰 

memberDetail.jsp 

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>

<!DOCTYPE html>
<html>
<head>
	<title>회원 정보</title>
</head>
<body>
	<p>아이디: ${member.id }</p>
	<p>이메일: ${member.email }</p>
	<p>이름: ${member.name }</p>
	<p>가입일: <tf:formatDateTime value="${member.registerDateTime }"
	pattern="yyyy-MM-dd HH:mm" /> </p>
	
</body>
</html>

 

 

결과

 

출처 : 스프링5 프로그래밍 입문 (최범균 저)