[Spring] Path Variable 충돌 해결(Ambiguous Request Mapping)

icebox127·2026년 1월 25일

프론트 연동 중, 뜬금없는 에러가 발생했다.
프로필 이미지 조회 시에는 memberId를 필요로 하지 않는데, memberId가 잘못되었다는 것이다.

알고보니 매핑 구조가 비슷한 다른 api가 있어서, 내가 만든 api의 경로인 profile-image가 {memberId}로 인식된 것이었다.

  @GetMapping("/{memberId}")
  public ApiResponse<MemberResDto.Profile> getMemberProfile(
      @PathVariable(name = "memberId") Long memberId) {
    MemberResDto.Profile response = memberService.getMemberProfile(memberId);
    return ApiResponse.onSuccess(SuccessCode.MEMBER_PROFILE_GET_OK, response);
  }

  @GetMapping("/profile-image")
  public ApiResponse<MemberResDto.ProfileImage> getProfileImage(
      @RequestHeader("Authorization") String token) {
    MemberResDto.ProfileImage response = memberService.getProfileImage(token);
    return ApiResponse.onSuccess(SuccessCode.MEMBER_PROFILE_IMAGE_OK, response);
  }

이러한 매핑 오류를 Ambiguous Request Mapping라고 한다.
말 그대로 애매한 매핑으로, 같은 주소(경로)로 연결된 메서드가 둘 이상 있어서, 스프링이 누굴 써야 할지 모르겠을때의 생기는 문제다.

나의 경우 공식적으로 Ambiguous Request Mapping 예외가 발생한 것은 아니지만,{memberId}와 /profile-image가 같은 depth에 존재하면서 경로 해석이 모호해져 profile-image가 memberId로 인식되어 생긴 문제였다.

따라서 경로에 슬래쉬를 추가하여 경로를 @GetMapping("/profile/image")로 바꿨다.

참고

https://everybitofme.tistory.com/2
https://kodong8774.tistory.com/111

profile
감자의 공부기록🥔

0개의 댓글