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 프로그래밍 입문 (최범균 저)