에러 : Name for argument of type [java.lang.Long] not specified

이창근·2024년 6월 9일
1

Spring공부

목록 보기
8/9


다들 한번쯤 보았을 이 창...
옛날에 인프런에서 김영한님 강의를 들었을 때, 느리면 빌드를 Gradle이 아닌 IntelliJ로 바꾸라고 하셔서 그렇게 사용하고 있었다. 근데 두둥. 문제가 발생했다.

문제 상황


인텔리제이로 빌드를 설정하고 테스트를 돌리니 컨트롤러 테스트에서 이렇게 오류가 떴다.

jakarta.servlet.ServletException: Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.Long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.

문제 원인은 @PathVariable로 설정한 id에 값이 제대로 적용되고 있지 않던 것이다.

Controller :

Test Code :

옛날이랑 똑같이 개발하고 있었는데, 갑자기 이런 오류가 뜨는게 이상했지만, 찾아보니 스프링부트 3.2 부터 생긴 문제라고 한다.

해결법


1. PathVariable 어노테이션에 이름을 다 적어준다.

-> 코드가 너무 지저분해지고 가독성만 안 좋아질 것 같아서 포기.

2. 에러메시지 처럼 컴파일러에 -parameters 옵션주기


이 부분에 이렇게 작성해주면 된다.

3. 그냥 Gradle로 Build하기

가장 간단한 해결법. 하지만 Gradle로 빌드하는 것이 IntelliJ로 빌드하는 것보다 아주 미세하게 느리다는 단점이 있다.
나는 2번의 해결방법의 작동구조를 이해하지 못하여, 안전한 이 방법을 사용했다.

profile
나중에 또 모를 것들 모음

0개의 댓글