URI patterns
- @RequestMapping 메서드는 URL 패턴을 사용하여 웹 요청을 컨트롤러 메서드에 매핑 가능하다.
- PathPattern
- URL 경로와 미리 분석된 PathContainer에 대해 미리 파싱된 패턴을 매칭한다.
- 웹 사용에 최적화되어 인코딩 및 경로 매개변수 처리에 더 효과적이고 효율적이다.
- Spring WebFlux에서 사용되는 유일한 방식이다.
- 버전 5.3부터 Spring MVC에 적용되었으며, 버전 6.0부터 기본 설정으로 활성화되었다.
- AntPathMatcher
- 문자열 패턴을 문자열 경로와 매칭한다.
- 스프링 구성에서 클래스 경로, 파일 시스템 및 기타 위치에 있는 리소스를 선택하는 데 사용된다.
- 문자열 경로 입력은 인코딩 및 URL 관련 문제를 처리하는 데 덜 효과적이며 효율성이 떨어진다.
- 두 방식 모두 AntPathMatcher와 동일한 패턴 구문을 사용
- PathPattern
- 경로 끝에서 0개 이상의 경로 세그먼트를 매칭하기 위한 캡처 패턴 지원 (2번째 패턴 예시)
- 여러 경로 세그먼트와 매치하는 것으로 제한하기 위해, ** 사용을 패턴 끝에서만 허용 (모호성 제거)
패턴 예시:
- "/resources/ima?e.png" - 경로 세그먼트에서 한 문자와 매칭
- "/resources/*.png" - 경로 세그먼트에서 0개 이상의 문자와 매칭
- "/resources/**" - 여러 경로 세그먼트와 매칭
- "/projects/{project}/versions" - 경로 세그먼트와 매칭하고 변수로 캡처
- "/projects/{project:[a-z]+}/versions" - 정규식을 사용하여 변수를 매칭하고 캡처
// @PathVariable을 사용하여, 캡처된 URI 변수 액세스
@GetMapping("/owners/{ownerId}/pets/{petId}")
public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId) {
// ...
}
// 클래스 및 메서드 수준에서의 URI 변수 선언
@Controller
@RequestMapping("/owners/{ownerId}")
public class OwnerController {
@GetMapping("/pets/{petId}")
public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId) {
// ...
}
}
URI 변수
- 적절한 데이터 타입으로 자동 변환되거나 TypeMismatchException을 발생시킨다.
- 간단한 데이터 타입은(int, long, Date 등)을 기본적으로 지원하며, 다른 데이터 유형도 지원 등록 가능
- Type Conversion
- DataBinder
- 명시적으로 이름 지정 가능 (예: @PathVariable("customId")),
- 이름이 동일하고 코드가 -parameters 컴파일러 플래그를 사용하여 컴파일되는 경우, 해당 세부 정보 생략 가능
- {varName:regex} 구문 : 정규 표현식을 사용하여 URI 변수를 선언
// URL "/spring-web-3.0.5.jar"가 주어지는 경우
// 다음 메서드로 이름, 버전 및 파일 확장자 추출 가능
@GetMapping("/{name:[a-z-]+}-{version:\\\\d\\\\.\\\\d\\\\.\\\\d}{ext:\\\\.[a-z]+}")
public void handle(@PathVariable String name, @PathVariable String version, @PathVariable String ext) {
// ...
}
URI path patterns
- 임베디드된 ${...} 플레이스홀더를 가질 수 있다.
- ${...} 플레이스홀더는 시스템 시작 시,PropertySourcesPlaceholderConfigurer를 사용하여 로컬, 시스템, 환경 및 기타 속성 소스로부터 값을 가져와 해결된다.
- 이 기능을 통해 기본 URL을 일부 외부 설정에 따라 매개변수화 가능하다.
'Develop > Spring' 카테고리의 다른 글
[Spring Web MVC] Handler Methods - MethodArgument (0) | 2023.04.17 |
---|---|
[Spring Web MVC] Request Mapping - consumes, produces (0) | 2023.04.17 |
[Spring Web MVC] Request Mapping - Parameters, headers (0) | 2023.04.17 |
[Spring Web MVC] Request Mapping (0) | 2023.04.17 |
[Spring Web MVC] @Controller vs @RestController (0) | 2023.04.17 |