-
Spring MVC - URL Mapping(요청 매핑) - @RequestMapping @GetMapping @PostMappingSpring/Spring MVC 2021. 12. 25. 16:36728x90반응형
URL Mapping
- @RequestMapping( "요청 URI" )
- @RequestMapping( value = "요청 URI", method = 특정 메서드 )
- 축약 애노테이션
- 경로변수(PathVariable)
- 경로변수(PathVariable) 다중 사용
- @RequestMapping의 활용
@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 ]
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 하나만 변경하면 되기 때문에 유지보수에도 편리한 점이 있다.
728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 폼 커스텀 태그(Form Custom Tag) (0) 2021.12.26 Spring MVC - 커맨드 객체(Command Object) (0) 2021.12.26 Spring MVC - JSP에 데이터 전달 (0) 2021.12.26 Spring MVC - @ModelAttribute : 객체로 쿼리 파라미터 바인딩 (0) 2021.12.26 Spring MVC - 쿼리 파라미터(Parameter) 전달(요청 파라미터 주입받기) (0) 2021.12.25