-
RestAPI PathVariable 부분에 여러개의 파라미터를 매핑하기프로그래밍/Spring Boot 2022. 12. 18. 17:54
지금 진행하는 프로젝트 특성상, 다음과 같은 시나리오가 필요하였다.
데이터베이스상에 기록된 다음과 같은 파라미터들이 현재 요청으로 들어오는 파라미터 들과 일치하는가 ?
를 보는것이 문제였는데,
일반적으로 사용하는 RequestMapping PathVariable 의 경우에는,
@RestController @RequestMapping("/route/{member}/{route}") public class CustomRouiteController { @GetMapping public Object GetCustomRoute( @PathVariable(value = "member") String memberId, @PathVariable(value = "route") String route ) { Map<String, String> map = new HashMap<>(); map.put("member", memberId); map.put("route", route); return map; } }
위와 같이 작성하게 되면 route 부분에 오는 부분만 가져올 수 있다는 것이다.
요청 URL 정보가 /route/testUser/hello 인 경우만 처리할 수 있다는 것이다.
그렇다면 /** 와 같은 방법은 찾아보니,
/route/{member}/hello** 이런식으로는 사용할 수 있지만,
/route/member/hello/aa/bb/cc 와 같은 케이스에서는 사용할 수 없다는 것이다..
그래서 조금 더 찾아보니 PathVariable에 Asterisk를 사용할 수 있는 방법이 있었다.
@RestController @RequestMapping("/route/{member}/{*route}") public class CustomRouiteController { @GetMapping public Object GetCustomRoute( @PathVariable(value = "member") String memberId, @PathVariable(value = "route") String route ) { Map<String, String> map = new HashMap<>(); map.put("member", memberId); map.put("route", route); return map; } }
위와 같이 PathVariable 영역에 {*route} 와 같이 처리를 해주게 된다면,
/route/{member}/.... 이후에 오는 모든 정보들을 route라는 경로변수로 담아올 수 있다는 것이다.
실제로 위에 코드를 적용하여, 실행 후 PostMan을 통해 요청/응답 정보를 살펴본 결과는 다음과 같다.
일반적인 PathVariable 같은 경우에는 / < 와 같은 경로정보가 포함되지 않고, 어떤 값이 포함되었는지만 나온다.
그 부분이 조금 차이가 있는 것 같다.
근데 위에 정보도 어떤 블로그를 통해 정보를 얻은거긴 한데,
Spring 공식 문서에도 내용을 찾을 수 없다..
혹시 관련 내용을 아시는 분은 정보를 댓글로 남겨주시면 감사드리겠습니다.
'프로그래밍 > Spring Boot' 카테고리의 다른 글
Spring Boot 테스트코드 동작시 CommandLineRunner 중복 문제 (0) 2023.01.09 Spring Boot 3.0 + Spring Security 6.0.0 FilterChain 작성 방법 (0) 2022.12.18