Framework/Spring🌱

[Spring Boot / Error] java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either.

개발자겨려 2024. 3. 31. 14:51

Mapping 의 "경로"와 "변수명"이 같다면 name을 생략 가능하지만,

스프링 부트 3.2 파라미터 이름 인식 문제예외가 발생한다.

    //GetMapping 경로의 {userId}, {orderId}와 @PathVariable의 변수명이 같다면 name 생략 가능
    @GetMapping("/mapping/users/{userId}/orders/{orderId}")
    public String mappingPath(@PathVariable String userId, @PathVariable Long orderId) {
        log.info("mappingPath userId={}, orderId={}", userId, orderId);
        return "ok";
    }

 

java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either.

 

해결방법은

스프링 부트 3.2부터 자바 컴파일러에 -parameters 옵션을 넣어주어야 애노테이션의 이름을 생략할 수 있다.

 

Window : File > Settings > Build, Exceution, Deployment > Compiler > Java Compiler 에서 Additonal command line parameters에 -parameters 옵션 추가

 

 

 

문제 원인

참고로 이 문제는 Build, Execution, Deployment -> Build Tools -> Gradle에서

Build and run using를 IntelliJ IDEA로 선택한 경우에만 발생한다.

Gradle로 선택한 경우에는 Gradle이 컴파일 시점에 해당 옵션을 자동으로 적용해준다.

자바를 컴파일할 때 매개변수 이름을 읽을 수 있도록 남겨두어야 사용할 수 있다. 컴파일 시점에 -parameters 옵션을 사용하면 매개변수 이름을 사용할 수 있게 남겨둔다.

스프링 부트 3.2 전까지는 바이트코드를 파싱해서 매개변수 이름을 추론하려고 시도했다. 하지만 스프링 부트 3.2 부터는 이런 시도를 하지 않는다.

'Framework > Spring🌱' 카테고리의 다른 글

@Transactional 과 Rollback규칙 (feat. Checked Exception , Unchecked Exception)  (1) 2025.04.14
[Spring]@RequiredArgsConstructor  (0) 2024.05.02
[Spring] @Autowired란?  (0) 2024.05.02
[Spring] MultiValueMap란?  (0) 2024.04.08
Di / IoC  (0) 2021.07.15