본문 바로가기

멋쟁이사자처럼_부트캠프/디버깅

25-04-22 [디버깅 기록] 파라미터 이름을 알 수 없어서 생기는 에러

문제 1. 게시판 {id}페이지 접근시 게시글을 찾을수 없어 오류 메세지가 뜨는 상황.

발생현상 : 나의보기에서는 보이는 게시글들이 게시판 상세보기에 접근하면 게시글 없음으로 뜨는 현상 발생.

 

오류 문구 : 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.

 

문구 설명 : 스프링이 컨트롤러나 서비스 메서드에서 @RequestParam, @PathVariable, @QueryParam 등으로 파라미터 이름을 가져와야 하는데, 그 이름을 알 수 없어서 생기는 에러.

 

접근 1. -parameters 플래그를 설정하여 컴파일 시점에 파라미터 이름 정보를 클래스 파일에 포함

설정한 -parameters 플래그는 Java 리플렉션(Reflection) 시에 메서드 파라미터의 이름 정보를 유지하도록 해주는 옵션이다.

이걸 안 주면 파라미터 이름이 "arg0", "arg1" 이런 식으로 나와서 스프링이 어떤 파라미터에 어떤 값을 넣어야 할지 판단 못 할 수 있음.

 

접근 2. @PathVariable("id")로 파라미터 이름을 명시

@PathVariable에 ("id")로 파라미터 이름을 명시해주었음.

이건 -parameters 플래그 없이도 파라미터 이름을 지정해주는 우회 방법이다.

 

해결 과정 : GPT 검색결과 해결책의 경로 변수(Path Variable)가 실제 코드와 달라서 혼동이 되어 다른 해결책을 계속 찾고있었다..

GPT는 현업에선 안정성을 위해 대부분 @PathVariable("id") 같이 명시적으로 써주는 걸 선호한다고 알려주었다. 내가 작업한 부분이 아니었기 때문에 문제를 찾고 해결하는데 더 많은 시간이 걸린 것 같다.