데브코스/TIL

스프링 부트 매개변수 이름 인식

민발자 2024. 12. 17. 16:52
728x90

[.[.[/].[dispatcherServlet] : 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

매개변수 바인딩이 안된다..

@RequestParam 어노테이션을 적으면 해결되지만 왜인지 해결하고 싶어졌다😑

찾아보니 스프링 부트 3.2부터 매개변수 이름을 인식 못한다고... 

 

Java Compiler 옵션 추가

-parameters 옵션을 추가했지만 여전히 같은 오류 발생😂

 

out 폴더 삭제 후 재컴파일

알고보니 out 폴더를 삭제해야 컴파일이 다시 일어나 옵션이 적용된다🥵

다시 컴파일하니 드디어 오류 없이 잘 동작한다😂

 

build tool 변경

 

빌드툴을 gradle로 변경!

 

문제 원인

공식 링크: https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x#parameter-name-retention

자바를 컴파일할 때 매개변수 이름을 읽을 수 있도록 남겨두어야 사용할 수 있다.

컴파일 시점에 -parameters 옵션을 사용하면 매개변수 이름을 사용할 수 있게 남겨둔다.

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

하지만 스프링 부트 3.2 부터는 이런 시도를 하지 않는다.

 

 

 

 

스프링 부트 생성자 바인딩이 안될 때

 

스프링 부트 생성자 바인딩이 안될 때

스프링 부트 3.2 또는 스프링 프레임워크 6.1 이상 사용 시 생성자 바인딩이 안 될 때, -parameters 컴파일러 옵션을 추가하여 해결할 수 있다.

castarray.github.io

 

728x90