코드 그라데이션
스프링 MVC - 컨트롤러 통합 본문
@RequestMapping 을 잘 보면 클래스 단위가 아니라 메서드 단위에 적용된 것을 확인할 수 있다.
따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다.
SpringMemberControllerV2
* 클래스 단위 -> 메서드 단위
* @RequestMapping 클래스 레벨과 메서드 레벨 조합
@Controller // Spring 컨테이너에 컨트롤러 빈으로 등록됨
@RequestMapping("/springmvc/v2/members") // 클래스 레벨의 URL 매핑
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form") // "/springmvc/v2/members/new-form" 경로로 매핑
public ModelAndView newForm() {
// "new-form" 뷰를 표시하는 ModelAndView 객체 생성하여 반환
return new ModelAndView("new-form");
}
@RequestMapping("/save") // "/springmvc/v2/members/save" 경로로 매핑
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
// HTTP 요청에서 사용자명(username)과 나이(age) 파라미터를 추출
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
// 회원 객체를 생성하고 회원 저장소에 저장
Member member = new Member(username, age);
memberRepository.save(member);
// ModelAndView 객체를 생성하고 뷰 이름을 설정
ModelAndView mv = new ModelAndView("save-result");
// ModelAndView에 회원 객체를 추가하여 뷰로 전달
mv.addObject("member", member);
return mv;
}
@RequestMapping // "/springmvc/v2/members" 경로로 매핑 (기본값)
public ModelAndView members() {
// 회원 저장소에서 모든 회원 정보를 조회
List<Member> members = memberRepository.findAll();
// ModelAndView 객체를 생성하고 뷰 이름을 설정
ModelAndView mv = new ModelAndView("members");
// ModelAndView에 회원 목록을 추가하여 뷰로 전달
mv.addObject("members", members);
return mv;
}
}
부연
- @RequestMapping("/save") 어노테이션은 save 메서드를 "/springmvc/v2/members/save" 경로와 매핑시킴.
이 메서드는 POST 요청을 처리하며, HTTP 요청에서 사용자명(username)과 나이(age) 파라미터를 추출하여
회원 객체를 생성하고 저장한다.
그런 다음 "save-result" 뷰에 회원 정보를 전달하는 ModelAndView 객체를 반환한다.
- 기본적으로 @RequestMapping 어노테이션은 메서드에 대한 경로를 명시하지 않으면
클래스 레벨의 경로와 조합하여 매핑한다. 따라서 members 메서드는 "/springmvc/v2/members" 경로로 매핑됨.
이 메서드는 GET 요청을 처리하며, 회원 목록을 조회하고
"members" 뷰에 회원 목록을 전달하는 ModelAndView 객체를 반환합니다.
=> 이 코드는 Spring MVC에서 GET 및 POST 요청을 처리하고, 뷰와 모델을 다루는 방법을 보여주며,
클래스 레벨과 메서드 레벨의 URL 매핑을 사용하여 요청을 처리.
조합
컨트롤러 클래스를 통합하는 것을 넘어서 조합도 가능하다.
다음 코드는 /springmvc/v2/members 라는 부분에 중복이 있다.
물론 이렇게 사용해도 되지만,
컨트롤러를 통합한 예제 코드를 보면 중복을 어떻게 제거했는지 확인할 수 있다.
클래스 레벨에 다음과 같이 @RequestMapping 을 두면 메서드 레벨과 조합이 된다.
조합 결과
실행
등록: http://localhost:8080/springmvc/v2/members/new-form
목록: http://localhost:8080/springmvc/v2/members
'Spring > MVC 1' 카테고리의 다른 글
요청 매핑 (0) | 2023.10.07 |
---|---|
스프링 MVC - 실용적인 방식 (0) | 2023.10.05 |
스프링 MVC 시작하기 (0) | 2023.10.04 |
검증 헤더와 조건부 요청 1 (0) | 2023.10.04 |
뷰 리졸버 (0) | 2023.10.03 |