From 2854f0c09bb643b9c6185c917ccb55f5ce6d89bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EB=AF=B8?= Date: Mon, 17 Aug 2026 19:10:51 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20@UserId=20=EB=A6=AC=EC=A1=B8=EB=B2=84?= =?UTF-8?q?=EA=B0=80=20Kotlin=20primitive=20long=EC=9D=84=20=EC=9D=B8?= =?UTF-8?q?=EC=8B=9D=20=EB=AA=BB=ED=95=B4=20/ranking/me=20500=20=EB=82=98?= =?UTF-8?q?=EB=8D=98=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UserIdResolver#supportsParameter가 boxed java.lang.Long만 매칭하는데, Kotlin의 non-null Long은 바이트코드상 primitive long으로 컴파일되어 리졸버가 파라미터를 인식하지 못하고 있었음. nullable(Long?)로 선언해 boxed Long으로 컴파일되게 수정. --- .../server/ranking/controller/RecordRankingController.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/runnect/server/ranking/controller/RecordRankingController.kt b/src/main/kotlin/org/runnect/server/ranking/controller/RecordRankingController.kt index bb37a1c..f60e229 100644 --- a/src/main/kotlin/org/runnect/server/ranking/controller/RecordRankingController.kt +++ b/src/main/kotlin/org/runnect/server/ranking/controller/RecordRankingController.kt @@ -31,10 +31,15 @@ class RecordRankingController( @GetMapping("course/{courseId}/ranking/me") @ResponseStatus(HttpStatus.OK) fun getMyRanking( - @UserId userId: Long, + // UserIdResolver#supportsParameter가 boxed java.lang.Long만 매칭한다. + // Kotlin의 non-null Long은 바이트코드상 primitive long으로 컴파일되어 + // 리졸버가 파라미터를 아예 인식하지 못하므로, 반드시 nullable(Long?)로 선언해 + // boxed Long으로 컴파일되게 한다. 실제로 null이 들어오는 경우는 없다 — + // 리졸버가 토큰이 없거나 유효하지 않으면 예외를 던진다. + @UserId userId: Long?, @PathVariable courseId: Long, ) = ApiResponseDto.success( SuccessStatus.GET_MY_RECORD_RANKING_SUCCESS, - recordRankingService.getMyRanking(courseId, userId), + recordRankingService.getMyRanking(courseId, requireNotNull(userId)), ) }