Backend/🌿Spring

[SpringBoot/Error] Required URI template variable 'id' for method parameter type int is not present 해결

발달중인 망고 2024. 1. 19. 00:43

안녕하세요. 오늘은 Spring Framework를 사용하면서 자주 마주치는 MissingPathVariableException에 대해 알아보고, 이 문제를 해결하는 방법을 공유하고자 합니다.

 

오류 개요

MissingPathVariableException은 Spring MVC에서 컨트롤러의 메서드가 URI 경로 변수를 요구하는데, 실제 요청 URL에 해당 변수가 포함되지 않았을 때 발생합니다. 에러 메시지는 다음과 같습니다

.w.s.m.s.DefaultHandlerExceptionResolver: Resolved [org.springframework.web.bind.MissingPathVariableException: Required URI template variable 'id' for method parameter type int is not present]

 

오류 원인

이 오류의 원인은 컨트롤러 메서드에서 @PathVariable 어노테이션을 사용하여 경로 변수를 선언했지만, 실제 HTTP 요청에서 해당 변수가 누락되었을 때 발생합니다. 예를 들어, 아래와 같은 컨트롤러 메서드가 있을 때 이 문제가 발생할 수 있습니다:

 

문제 분석

위의 예시에서 @PathVariable int id는 URL 경로에서 id 값을 기대합니다. 하지만 경로는 {albumId}로 명시되어 있어, id와 albumId 간의 불일치가 발생합니다. 이로 인해 Spring이 id 경로 변수를 찾지 못하고 MissingPathVariableException을 발생시킵니다.

 

해결 방법

이 문제를 해결하기 위해서는 @PathVariable의 변수 이름과 URL 템플릿의 변수 이름이 일치해야 합니다. 따라서, 위 메서드를 다음과 같이 수정할 수 있습니다:

혹은

위와 같이 @PathVariable("albumId")로 수정하면, URL 경로에서 albumId라는 이름의 변수를 찾아 id 파라미터에 바인딩합니다.

결론

MissingPathVariableException은 경로 변수의 이름 불일치로 인해 발생하는 흔한 오류입니다. 이를 해결하기 위해선 @PathVariable 어노테이션의 변수 이름과 URL 템플릿의 변수 이름을 일치시켜야 합니다. 올바른 이름 매핑을 통해 이 문제를 쉽게 해결할 수 있습니다.


이 글이 Spring Framework 사용 중 발생할 수 있는 MissingPathVariableException 문제를 해결하는 데 도움이 되길 바랍니다. 감사합니다.