@RequestMapping 정규식, PathPattern 활용하기
'@RequestMapping'에는 정규식과 PathPattern을 적용할 수 있는데요.
이런 기능이 있는 줄 모르고 있었는데, 간단하고 또 활용성 있는 기능인 것 같아서 정리하게 되었습니다.
@RequestMapping 정규식 사용 방법
@RequestMapping(value = "{변수명:정규식}")
public void request(@PathVariable String 변수명) {
...
}
@RequestMapping에서는 다음과 같이 '{변수명:정규식}' 형식을 통해 정규식을 적용할 수 있는데요.
//영문 대소문자
//http://localhost:8080/request/TestValue
@RequestMapping("/request/{value:[a-zA-Z]*}")
public void request1(@PathVariable String value) {
System.out.println("request1 value: " + value);
//request1 value: TestValue
}
//숫자
//http://localhost:8080/request/12345
@RequestMapping("/request/{value:[0-9]*}")
public void request2(@PathVariable String value) {
System.out.println("request2 value: " + value);
//request2 value: 12345
}
간단한 사용 예시로는 위 코드와 같이 영문 대소문자, 숫자 등을 지정할 수 있으며, Controller 단에서 다음 두 가지 @RequestMapping이 모두 있을 때, 요청되는 value 값에 따라 매핑되는 메서드가 달라집니다.
요청되는 value 값이 적용된 정규식에 해당하지 않는 경우 404 'Not Found'가 발생하며, 아래와 같이 소문자, 대문자, 숫자를 각 1개 이상 포함하고 최소 자리가 3개 이상 같은 복잡한 정규식도 적용할 수 있습니다.
@RequestMapping("/request/{value:(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{3,}}")
public void request(@PathVariable String value) {
...
}
(각 예시의 '/request/' 경로는 단순 예시를 위해 사용한 것입니다.)
***
추가적으로 dot(.)을 포함한 문자열이 요청되었을 때 dot(.) 이후의 문자열이 사라지는 문제의 경우는 스프링 5.3 버전 이후로 해결되었으며, 자세한 내용은 아래 spring 공식 문서에서 확인할 수 있습니다.
@RequestMapping PathPattern 사용 방법
// '?'를 사용한 한 문자 일치
@RequestMapping("/request/ab?de")
public void request() {
// '/request/abcde', '/request/abTde', '/request/ab1de' 등 요청 시 매핑되어 동작
}
// '*' 경로 안의 모든 문자 일치
@RequestMapping("/request/*/example")
public void request() {
// '*' 위치에 어떤 값이 들어와도 매핑되어 동작
// '/*.html/'과 같은 방식으로도 사용 가능
}
// '**' 하위 경로 모든 문자 일치
@RequestMapping("/request/**")
public void request() {
// '/request/a/b', '/request/a/b/c' 등 요청 시 매핑되어 동작
}
// '*value' 하위 경로 끝까지 @PathVariable을 통한 변수로 받음
//http://localhost:8080/request/a/b/c
@RequestMapping("/request/{*value}")
public void request(@PathVariable String value) {
System.out.println("request value: " + value);
//request value: /a/b/c (맨 앞에 '/'가 포함됩니다.)
}
이어서 PathPattern에 대한 사용 방법 및 예시 코드입니다.
(정규식의 예시와 마찬가지로 각 예시의 '/request/' 경로는 단순 예시를 위해 사용한 것입니다.)
< 참고 자료 >
https://docs.spring.io/spring-framework/docs/3.2.16.RELEASE/spring-framework-reference/html/mvc.html
'Programming > Spring Boot' 카테고리의 다른 글
repository, repositoryCustom, repositoryImpl 구조를 사용하자 (0) | 2023.11.04 |
---|---|
@SpringBootTest 스프링 부트 통합 테스트 개념과 예시 코드 (0) | 2023.10.31 |
OSIV(Open Session In View) 개념 정리 및 예시 (1) | 2023.10.06 |
spring boot email 전송 (spring-boot-starter-mail, mailjet) (0) | 2023.10.02 |
(Spring Boot) Filter를 통한 Request, Response Logging (4) | 2023.09.03 |