인프런 영문 브랜드 로고
인프런 영문 브랜드 로고
채널톡 아이콘

인프런 커뮤니티 질문&답변

JongYun Won님의 프로필 이미지

작성한 질문수 7

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

요청 매핑 - API 예시

RestController GetMapping의 중복 질문

작성

·

77

0

MappingClassController에서 구현한 GetMapping은

/mapping/users + GET으로 호출합니다.

@GetMapping("/mapping/users")
public String user() {
    return "get users";
}

이 때, 앞서 구현한 MappingController에서 구현한

@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data) {
    log.info("mappingPath userId={}", data);
    return "ok";
}

위 코드는 /mapping/{userId} + GET으로 호출합니다.

 

  1. 위 상황에서, /mapping/users를 GET으로 조회할 경우

  2. MappingClassController가 호출됩니다.

제가 궁금한 것은,

  1. 두 컨트롤러 사이에 우선순위가 존재하나요?

  2. 그렇지 않다면 Spring은 같은 문자열인 users가 {userId}가 아닌 것을 어떻게 구별하나요?

답변 1

1

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. JongYun Won님,

스프링 MVC에서 경로 매핑과 관련한 질문을 주셨군요. 유사한 질문과 답변들을 찾아 보았으니 참고 부탁드립니다.

  1. URL PathVariable과 고정 문자열 URL 매핑 우선순위:
    • 스프링에서는 기본적으로 고정 URL 패턴이 가변 URL 패턴보다 우선하게 됩니다. 따라서 /mapping/users/mapping/{userId} 가 동시에 매핑되면, /mapping/users 가 우선 호출됩니다.

예를 들어, 다음 링크와 유사한 질문이 있습니다:
- @GetMapping 관련 질문입니다
- PathVariable에 의해 api URL이 중복되는 경우에는 어떻게 되나요?

  1. Spring이 고정 문자열과 PathVariable을 구별하는 방식:
    • 스프링은 컨트롤러에서 명시된 경로 패턴과 요청된 URL을 매핑할 때, 먼저 고정 문자열을 가진 패턴을 확인하고 그 뒤에 가변 패턴을 확인합니다. 따라서 위에서 예시로 든 users는 고정 문자열을 가진 패턴으로 매핑되고, {userId}는 그 다음으로 매핑됩니다.

추가로 참조할 수 있는 링크는 다음과 같습니다:
- GetMapping() path 질문
- @GetMapping 질문있습니다

위의 링크들을 참고해 보시면, 스프링의 경로 매핑 우선순위와 PathVariable 매핑 관련 더 자세한 정보를 얻으실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

JongYun Won님의 프로필 이미지
JongYun Won
질문자

인턴님 ㄳ