2 minute read


@RequestMapping

@RequestMapping ?

@RequestMapping 은 애노테이션을 활용한
스프링의 매우 유연하고 실용적인 컨트롤러이다.

// 앞서 알아보았듯이 핸들러 매핑과 핸들러 어댑터 선정 기준에서 가장 높은 우선순위를 가진 
// @RequestMappingHandlerMapping / @RequestMappingHandlerAdapter 는
// @RequestMapping 을 기반으로 만든 이름이다.
// 스프링이 자동으로 스프링빈으로 등록한다. (@Controller 내부에 @Component 가 포함되어 있어서 Component Scan의 대상이 된다.) 
@Controller
public class CarefreeLifeMemberFormControllerV1 {
  
// 요청정보를 매핑한다. 해당 URL이 호출되면 메서드 실행.
  @RequestMapping("/springmvc/CarefreeLife/V1/members/new-form") 
  public ModelAndView process() {             // 애노테이션을 기반으로 동작하기에 메서드 이름은 아무거나 상관없다.
      return new ModelAndView("new-form");    // 모델과 뷰의 정보를 담아 반환.
  }                                           // 후에 String 으로 뷰의 논리 이름만 반환해도 동작하도록 변환.
@RequestMapping("/springmvc/CarefreeLife/V1")   // 공통된 상위 URL을 중복 사용하지 않고 한번에 선언이 가능하다. 
public class CarefreeLifeMemberControllerV3 {
    
    @GetMapping("/member-form") // /springmvc/CarefreeLife/V1 + /member-form 과 같은 URL 요청시 실행됨.
    public String memberForm() {    
        return "member-form";   // ModelAndView 대신 String 으로 뷰의 논리 이름을 직접 반환 가능.
    }
    
    
    @GetMapping // 추가적인 URL 경로가 지정되지 않으면 @RequestMapping 에 지정된 상위 URL 요청시 실행됨.
    public String members(Model model){
        ...
        return "members";   // ModelAndView 대신 String 으로 뷰의 논리 이름을 직접 반환 가능.
    }
    
    @PostMapping("/save")   // /springmvc/CarefreeLife/V1 + /save 와 같은 URL 요청시 실행됨. 
    public String saveMember(
            @RequestParam("username") String username,  // 스프링은 @RequestParam 애노테이션을 사용하여 
            @RequestParam("age") int age,               // HTTP 요청 파라미터를 직접 받을 수 있다.
            Model model) {     // @RequestParam 은 request.getParameter("username") 과 거의 같은 코드이다.
        ...
        return "save-result";   // ModelAndView 대신 String 으로 뷰의 논리 이름을 직접 반환 가능.
    }
    
    // @Get, PostMapping 이외에도 Put, Delete, Patch 등의 애노테이션도 지원한다.
}
  • @Controller :
    • 클래스 레벨에 지정.
    • 내부에 Component 애노테이션이 포함되어 있어서 Component Scan의 대상이 된다.
    • 스프링이 실행되는 순간 Component Scan에 의해 자동으로 스프링 빈으로 등록된다.
    • 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식하게 해준다.

  • @RequestMapping("URL") :
    • 클래스 레벨, 메서드 레벨 지정 가능.
    • 요청 정보를 매핑한다. 해당 URL이 호출되면 실행할 메소드를 지정.
    • 애노테이션을 기반으로 동작하므로 실행 메서드의 이름은 원하는 대로 지어도 된다.
    • 배열로 지정되어 있다. ()안의 URL은 여러개를 넣어 서로 다른 URL로 요청시 같은 뷰를 반환해줄 수 있다.
      • ex. @RequestMapping({“/carefree/v1”, “/carefree/v3”}) -> 같은 view or String 반환.

@RequestMapping 의 URL 통합 및 조합 기능


  • 컨트롤러의 클래스 레벨에 적용시켜 메서드 단위가 아닌 클래스 단위로 통합이 가능하다.
  • 통합 뿐 아니라 아래와 같이 중복되는 상위 URL을 하나로 묶어 클래스 레벨에 적용 후
    메서드 단위로 추가적인 URL을 지정하여 조합도 가능하다.
  • 클래스 레벨 @RequestMapping(“/springmvc/v2/members”) : 공통된 상위 URL 지정
    • 메서드 레벨 @RequestMapping(“/new-form”) ➡️ /springmvc/v2/members/new-form
    • 메서드 레벨 @RequestMapping(“/save”) ➡️ /springmvc/v2/members/save
    • 메서드 레벨 @RequestMapping ➡️ /springmvc/v2/members
      (추가적인 URL을 지정하지 않으면 클래스 레벨에 지정된 상위 URL 자체로 지정됨.)



@RestController

  • 일반적으로 스프링의 @Controller 애노테이션을 사용하면 반환 값으로 view의 이름을 반환한다.
    • 이 경우 컨트롤러를 통해 반환된 뷰의 이름을 가지고 뷰 리졸버를 통해 뷰를 렌더링하여 화면에 띄워주게 된다.
  • 하지만 @RestController를 사용하게 되면 반환값으로 view의 이름이 아닌 String을 반환하게 된다.
    • 이 경우 반환된 String을 HTTP Message Body에 즉각 삽입하여 HTTP response를 하게 된다.

      rest_controller_1_Procdess
      @Restcontroller 사용하여 메시지 바디에 삽입할 String을 반환하는 모습

      rest_controller_2_Procdess
      @Restcontroller에서 반환한 String이 HTTP Message Body에 그대로 삽입되어 있는 모습



최대한의 설명을 코드 블럭 내의 주석으로 달아 놓았습니다.

혹시 이해가 안가거나 추가적인 설명이 필요한 부분, 오류 등의 피드백은 언제든지 환영합니다!

긴 글 읽어주셔서 감사합니다. 포스팅을 마칩니다.



처음으로~

참고:Inflearn - 김영한님_강의

Task Lists

  • @RequestMapping 사용법
  • @RequestMapping 의 URL 통합 및 조합 기능
  • [x]
  • [x]
  • [x]
  • [x]
  • [x]
  • [x]
  • [x]

Comments