728x90

Spring MVC 애플리케이션 개발 시, @RequestParam 애너테이션을 사용할 때 종종 발생할 수 있는 오류가 있습니다. 이 오류는 컴파일 시 -parameters 플래그가 설정되지 않아 발생합니다. 오류 메시지는 다음과 같습니다

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root cause

Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.

오류 원인

이 오류는 @RequestParam 애너테이션을 사용할 때 메서드 파라미터의 이름을 제대로 인식하지 못해 발생합니다. 특히 컴파일러가 파라미터 이름 정보를 포함하지 않도록 설정된 경우 발생합니다. 이를 해결하려면 여러 가지 방법이 있습니다.

해결 방법

1. @RequestParam 애너테이션에 이름 속성 지정하기

가장 간단한 해결책은 @RequestParam 애너테이션에 명시적으로 파라미터 이름을 지정해 주는 것입니다.

@RequestMapping("/request")
public String handleRequest(@RequestParam("test") String testName) {
    // ...
}

여기서 "test"는 요청 파라미터의 이름을 명시적으로 지정한 것입니다. 이 방법을 사용하면 컴파일러의 파라미터 이름 정보 유무와 상관없이 오류를 방지할 수 있습니다.

2. -parameters 플래그 추가

다른 방법으로는, 컴파일 시 -parameters 플래그를 사용하여 컴파일러가 파라미터 이름 정보를 포함하도록 하는 것입니다. 이렇게 하면 @RequestParam 애너테이션에서 자동으로 파라미터 이름을 인식할 수 있게 됩니다.

3. 프로젝트 설정 변경 (Gradle 빌드 도구 사용 시)

Setting -> Gradle 에서 Intellij IDEA가 아닌 Gradle Default를 사용

4. build.gradle 파일에 -parameters 플래그 추가

Gradle 빌드를 사용하는 경우, 다음과 같이 build.gradle 파일에 -parameters 플래그를 추가해야 합니다:

tasks.withType(JavaCompile) {
    options.compilerArgs << '-parameters'
}

위 설정은 모든 JavaCompile 타입의 작업에 대해 컴파일러 옵션으로 -parameters 플래그를 추가합니다. 이 플래그는 컴파일러가 메서드 파라미터 이름 정보를 클래스 파일에 포함시키도록 지시합니다.

728x90