ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 공식 문서에도 내용을 찾을 수 없다..

     

    혹시 관련 내용을 아시는 분은 정보를 댓글로 남겨주시면 감사드리겠습니다.

    댓글

Designed by Tistory.