본문 바로가기

spring

SPRING MVC 통합 컨트롤러

@RequestMapping 을 잘 보면 클래스 단위가 아니라 메서드 단위에 적용된 것을 확인할 수 있다. 따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다.

이전에 글에서는 클래스에 @Controller 애노테이션을 이용해 스프링빈으로 만들고 메서드를 만들어 @RequestMapping 애노테이션을 적용시켰다. 이번엔 하나의 Class단위로 만들어 보자.

@Controller
public class StpringMemberControllerV2 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("springmvc/v2/members/new-form")
    public ModelAndView process(){
        System.out.println("SpringMemberFormControllerV1.process");
        return new ModelAndView("new-form");
    }

    @RequestMapping("/springmvc/v2/members")
    public ModelAndView ListMember(){
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members",members);
        return mv;
    }

    @RequestMapping("/springmvc/v2/members/save")
    public ModelAndView memberSave(HttpServletRequest request, HttpServletResponse response){
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));
        Member member = new Member(username,age);
        memberRepository.save(member);
        ModelAndView mv = new ModelAndView("save-result");
        mv.addObject("member",member);
        return mv;
    }
}

이렇게 하나의 컨트롤러 지정 클래스에 몰아서 넣어도 작동은 문제 없이 잘 된다.

하지만 매우 불편한 부분이 보이는데 바로 각 @RequestMapping에 매핑주소를 보게 되면 공통부분이 존재한다는 점이다.

@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/new-form")
    public ModelAndView process(){
        System.out.println("SpringMemberFormControllerV1.process");
        return new ModelAndView("new-form");
    }

    @RequestMapping("")
    public ModelAndView ListMember(){
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members",members);
        return mv;
    }

    @RequestMapping("/save")
    public ModelAndView memberSave(HttpServletRequest request, HttpServletResponse response){
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));
        Member member = new Member(username,age);
        memberRepository.save(member);
        ModelAndView mv = new ModelAndView("save-result");
        mv.addObject("member",member);
        return mv;
    }
}

이처럼 @Controller 아래 @RequestMapping을 지정해 메서드에 지정된 매핑들 앞에 지정해 줄수 있다.

'spring' 카테고리의 다른 글

로깅  (0) 2023.03.27
SPRING MVC 실용적인 방식  (0) 2023.03.22
SPRING MVC 시작하기  (0) 2023.03.21
뷰 리졸버  (0) 2023.03.21
HandlerMapping, HandlerAdapter  (0) 2023.03.20