[Spring] 스프링의 주요 어노테이션과 요청핸들러 메서드

류넹·2024년 2월 26일
1

Spring

목록 보기
14/50

# 목적

  • Spring의 @Controller, @RequestMapping, @GetMapping 어노테이션과 요청핸들러 메서드에 대한 이해




@Controller

  • 컨트롤러 클래스임을 나타내는 어노테이션
  • @Component 어노테이션의 하위 어노테이션
  • 이 어노테이션이 부착된 클래스는 스프링 컨테이너의 자동 스캔 대상
  • 요청핸들러 메서드를 포함하고 있다.

@RequestMapping

  • HTTP 요청과 요청핸들러 메서드를 매핑하는 어노테이션
  • 요청방식을 지정하지 않으면 요청방식과 상관없이 매핑된다.
  • 주요 속성
    • path : 요청 URI를 지정한다.
    • value : 요청 URI를 지정한다.
    • method : 요청방식을 지정한다. GET, POST, PUT, DELETE를 매핑할 수 있다.
      ex)
      • @RequestMapping(path = "/abc", method = RequestMethod.GET)
        요청 URI가 "/abc"이고, 요청방식이 GET인 요청과 매핑된다.
        @GetMapping(path = "/abc")와 동일하다.
      • @RequestMapping(path = "/abc", method = RequestMethod.POST)
        요청 URI가 "/abc"이고, 요청방식이 POST인 요청과 매핑된다.
        @PostMapping(path = "/abc")와 동일하다.
    • param : 요청파라미터값으로 매핑을 지정한다.
      ex)
      • @GetMapping(path = "/abc", params = "deleteYn=Y")
        요청 URI가 "/abc"이고, 요청파라미터값의 deleteYn이 "Y"인 요청과 매핑된다.
      • @Getmapping(path = "/abc", params = "deleteYn")
        요청 URI가 "/abc"이고, 요청파라미터값의 deleteYn이 있는 요청과 매핑된다.
        즉, /abc?deleteYn=Y 혹은 /abc/deleteYn=N과 매핑된다.
      • @Getmapping(path = "/abc", params != "deleteYn")
        요청 URI가 "/abc"이고, 요청파라미터값의 deleteYn이 없는 요청과 매핑된다.

@GetMapping

  • HTTP 요청과 요청핸들러 메서드를 매핑하는 어노테이션
  • HTTP 요청 중에서 GET 방식의 요청과 요청핸들러 메서드를 매핑시킨다.
  • 주요 속성
    • path : 요청 URI를 지정한다.
    • value : 요청 URI를 지정한다.
    • param : 요청파라미터값으로 매핑을 지정한다.
      ex)
      • @GetMapping(path = "/abc", params = "deleteYn=Y")
        요청 URI가 "/abc"이고, 요청파라미터값의 deleteYn이 "Y"인 요청과 매핑된다.
      • @Getmapping(path = "/abc", params = "deleteYn")
        요청 URI가 "/abc"이고, 요청파라미터값의 deleteYn이 있는 요청과 매핑된다.
        즉, /abc?deleteYn=Y 혹은 /abc/deleteYn=N과 매핑된다.
      • @Getmapping(path = "/abc", params != "deleteYn")
        요청 URI가 "/abc"이고, 요청파라미터값의 deleteYn이 없는 요청과 매핑된다.




요청핸들러 메서드

  • HTTP 요청을 처리하는 메서드
  • Controller 클래스에 정의한다.
  • @RequestMapping, @GetMapping, @PostMapping 어노테이션으로 특정한 HTTP 요청과 매핑된다.
  • 역할
    • 클라이언트의 HTTP 요청을 처리한다.
    • 요청 처리를 위해 업무로직 메서드를 호출한다.
    • 뷰에 모델을 전달한다.
    • HTTP 요청처리 후 이동할 뷰페이지 혹은 재요청 URL을 프론트컨트롤러로 반환한다.

요청핸들러 메서드의 Signature

  • 반환타입
    • String
      • 뷰 이름을 반환한다.
      • JSP 기반의 웹 애플리케이션에서는 JSP 페이지의 경로 및 이름이다.
      • 반환값이 "redirect:"로 시작하면 재요청 URL을 반환하는 것이다.

  • 매개변수
    • 1) 기본자료형 타입

      • 요청파라미터값을 매개변수에 바인딩한다.
      • ex)
      // 요청
      //    http://localhost/list?page=1&opt=title&keyword=자바
      // 요청핸들러 메서드
            @GetMapping(path = "/list")
            public String list(int page, String opt, String keyword) {
      
            }
      /*
       * 매개변수 page에는 1이, opt에는 title이, keyword에는 자바가 바인딩된다.
       * 필요한 경우 문자열을 정수로 변환한다.
       * 단, 매개변수에 지정한 이름과 동일한 이름의 요청파라미터값이 없으면 오류가 발생한다. 
       */

    • 2) @RequestParam

      • 요청파라미터값을 매개변수에 바인딩한다.
      • ex)
      // 요청
      //    http://localhost/list?page=1&opt=title&keyword=자바
      // 요청핸들러 메서드
            @GetMapping(path = "/list")
            public String list(@RequestParam("page") int page,
                               @RequestParam("opt") String opt,
                               @RequestParam("keyword") String keyword) {
      
            }
      /*
       * 매개변수 page에는 1이, opt에는 title이, keyword에는 자바가 바인딩된다.
       * 필요한 경우 문자열을 정수로 변환한다.
       * 단, 매개변수에 지정한 이름과 동일한 이름의 요청파라미터값이 없으면 오류가 발생한다. 
       */
      • ex)
      // 요청
      //    http://localhost/list?page=1&opt=title&keyword=자바
      // 요청핸들러 메서드
            @GetMapping(path = "/list")
            public String list(@RequestParam(name = "page", required = false, defaultValue = "1") int page,
                               @RequestParam(name = "opt", required = false) String opt,
                               @RequestParam(name = "keyword", required = false) String keyword) {
      
            }
      /*
       * @RequestParam의 속성값을 이용하면 요청파라미터와 매개변수 바인딩을 제어할 수 있다.
       * @RequestParam의 주요 속성
           name         : 요청파라미터 이름을 지정한다.
           required     : 요청파라미터 필수 여부를 지정한다. 기본값은 true
           				false로 지정하면 매개변수와 바인딩되는 요청파라미터가 없어도 상관없다.
           defaultValue : 요청파라미터가 없을 때 매개변수에 비인딩한 기본값이다. 반드시 문자열로만 값을 설정한다.
                          기본값을 지정하지 않으면 null값이 매개변수에 바인딩된다.
                          매개변수의 타입이 String인 경우에는 null값이 바인딩되어도 상관없지만,
                          매개변수의 타입이 int, long, double인 경우에는 반드시 기본값을 지정해야 한다.
       */

    • 3) Model

      • 뷰에 전달할 값을 저장하는 객체
      • ex)
      @GetMapping("/")
      public String home(Model model) {
      	model.addAttribute("msg", "홈페이지 방문을 환영합니다.");
      	return "home";
      }
      /*
         home.jsp
             <h1>홈</h1>
             <p>${msg }</p>
           
       * Spring mvc는 요청핸들러 메서드의 매개변수에 Model이 정의되어 있으면 Model 타입의 객체를 생성해서 바인딩한다.
       * Model 객체는 요청핸들러 메서드가 뷰에서 표현한 정보를 전달할 때 사용하는 객체다.
       * Model 객체에 저장된 값은 JSP로 내부 이동하기 전에 HttpServletRequest 객체에 속성으로 저장된다.
       * 
       */

    • 4) Form 객체

      • 폼 입력값을 저장하는 객체
      • ex)
      <form method="post" action="create">
      	상품이름 : <input type="text" name="name" />
          상품가격 : <input type="text" name="price" />
          상품수량 : <input type="text" name="stock" />
          <button>등록</button>
      </form>
      
      @Getter @Setter
      public class ProductCreateForm {
      	String name;
          int price;
          int stock;
      }
      
      @PostMapping("/create")
      public String create(ProductCreateForm form) {
      
      }
      
      /*
       * 요청핸들러 메서드는 Form 객체를 매개변수로 사용할 수 있다.
       * spring mvc는 요청핸들러 메서드에 Form 객체가 정의되어 있으면 폼입력값을 저장하기 위한 객체로 사용한다.
       * Form 객체를 처리하는 순서
           1. 요청핸들러 메서드의 매개변수를 조사한다.
           2. 요청핸들러 메서드의 매개변수에 Form 객체가 정의되어 있으면, Form 객체를 생성한다. 예시에서는 ProductCreateForm 객체를 생성한다.
           3. ProductCreateForm 객체의 설계도 정보를 분석한다.(멤버변수명, 멤버변수타입 등)
           4. 요청객체의 요청파라미터에서 멤버변수이름과 동일한 이름의 요청파라미터값을 조회한다.
           5. 조회된 요청파라미터값을 적절한 타입으로 변환한 다음, Form 객체의 Setter 메서드를 호출해서 값을 저장한다. 모든 멤버변수에 대해서 이 작업을 수행한다.
           6. 요청핸들러 메서드를 실행할 때, 요청파라미터값이 저장된 Form 객체를 매개변수에 전달한다.
       */
      
profile
학습용 커스터마이징 간단 개발자 사전

0개의 댓글