ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - URL Mapping(요청 매핑) - @RequestMapping @GetMapping @PostMapping
    Spring/Spring MVC 2021. 12. 25. 16:36
    반응형

     

     

     

     

    URL Mapping

     

     

     

     

     

     

    @RequestMapping( "요청 URI" )

     

    • URI 다중 설정도 가능 - @RequestMapping( { "요청 URI1", "요청 URI2" } )
    • HTTP 메서드 모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE
    • 클라이언트가 URL를 요청했을 시 해당 URL을 Mapping 하여 요청 화면을 보여준다.

     

    /test1 URI 요청

    @RestController
    public class testController {
    	
    	@RequestMapping("/test1")
    	public String test1() {
    		return "ok";
    	}
    }
    @RestController   
     - @Controller는 반환 값이 String이면 뷰 이름으로 인식된다.(ok.jsp or ok.html)
     - @RestController는 반환 값으로 뷰를 찾는 것이 아닌 HTTP 메시지 바디에 바로 입력

    @RequestMapping
     - /test1 URL호출이 오면 해당 메서드가 실행되도록 매핑

    return
     - "ok" 문자열을 메시지 바디에 입력하여 응답 메시지로 전달

     

    @RequestMapping( value = "요청 URI", method = 특정 메서드 )

     

    • 요청 URI가 오면 HTTP 메서드 종류에 따른 매핑
    • method 속성으로 메서드를 특정해주면 해당 메서드만 매핑이 된다.
    • 특정 메서드 : RequestMethod.[ GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE ]

     

    RequestMethod는 enum 클래스이다.

    HTTP GET 메서드 /test 요청

    @RestController
    public class MappingClassController {
    
        @RequestMapping(value = "/test", method = RequestMethod.GET)
        public String testGet() {
            return "GET ok";
        }
    }

     

    참고
     만약 여기에 POST 요청을 하면 스프링 MVC는
    HTTP 405 상태코드(Method Not Allowed)를 반환

     

     

    HTTP 메서드 요청에 따른 축약 애노테이션

     

    • 편리한 축약 애노테이션
    • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
    • 보통 @RequestMapping 보단 축약 애노테이션을 많이 사용한다.
    • 메서드 종류가 다르면 같은 URL 요청처리도 가능하다

     

    /test1 URI GET 메서드 요청과 POST 메서드 요청

    @RestController
    public class MappingClassController {
    
        @GetMapping("/test1")
        public String test1Get() {
            return "Get ok";
        }
        @PostMapping("/test1")
        public String test1Post() {
            return "Post ok";
        }
    }

     

     

    요청 URI에 경로변수(PathVariable) 사용 1

     

    • /test1/{경로변수} 처럼 경로에 변수를 포함하여 URI 요청
    • 최근 HTTP API는 이처럼 식별자를 넣는 스타일을 선호한다.
    • 경로변수 명과 파라미터 명이 같으면 경로변수 명 생략 가능
      @PathVariable("userId") String userId   ->   @PathVariable String userId

     

    @Slf4j
    @RestController
    public class testController {
    	
    	@GetMapping("/test1/{userId}")
    	public String test1(@PathVariable("userId") String data) {
        
    		log.info("mappingPath userId={}", data);
    		return "Get ok";
    	}
        
    	// 경로변수 명 생략 예시
    	@GetMapping("/test2/{userId}")
    	public String test2(@PathVariable String userId) {
        
    		log.info("mappingPath userId={}", data);
    		return "Get ok";
    	}
    }

     /test1/userA 로 URI 요청 시 해당 경로변수가 잘 들어왔는지 logging을 통해 확인하였다.

     


     

     

    요청 URI에 경로변수(PathVariable) 다중 사용

     

    • 경로변수를 1개 이상 사용하는 방법

     

    @RestController
    public class testController {
    	
    	@GetMapping("/test1/{userId}/orders/{orderId}")
    	public String test1(@PathVariable String userId, @PathVariable Long orderId) {
        
    		log.info("test1Path userId={}, orderId={}", userId, orderId);
    		return "Get ok";
    	}
    }

     /test1/userA/orders/10 로 URI 요청 시 해당 경로변수가 잘 들어왔는지 logging을 통해 확인하였다.


     

     

    URL의 경로에 따른 @RequestMapping의 활용

     

    공통부분은 @RequestMapping을 이용해 따로 설정할 수 있다.

     

    @RestController
    @RequestMapping("/sub/")
    public class MappingClassController {
    
        //	@GetMapping("/sub/test1")
        @GetMapping("test1")
        public String test1() {
            return "Get ok";
        }
    
        //	@GetMapping("/sub/test2")
        @GetMapping("test2")
        public String test2() {
            return "Get ok";
        }
    }
    @RequestMapping("/sub/")
     - 공통부분인 /sub/를 따로 메서드 위가 아닌 클래스 위에 따로 설정
     - 이로 인해 중복된 값들을 안 적어도 된다. 

     

     이와 같이 작성했을 때 이점은 보기 편할 뿐만 아니라 만약 파일 명이 바뀌거나 위치가 변경되어도 위에 있는 @ReqiestMapping 하나만 변경하면 되기 때문에 유지보수에도 편리한 점이 있다.

    반응형

    댓글

Designed by Tistory.