코드 그라데이션

스프링 MVC - 컨트롤러 통합 본문

Spring/MVC 1

스프링 MVC - 컨트롤러 통합

완벽한 장면 2023. 10. 5. 18:36

 

@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

 

 

 

728x90

'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
Comments