데브코스/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로 변경!
문제 원인
자바를 컴파일할 때 매개변수 이름을 읽을 수 있도록 남겨두어야 사용할 수 있다.
컴파일 시점에 -parameters 옵션을 사용하면 매개변수 이름을 사용할 수 있게 남겨둔다.
스프링 부트 3.2 전까지는 바이트코드를 파싱해서 매개변수 이름을 추론하려고 시도했다.
하지만 스프링 부트 3.2 부터는 이런 시도를 하지 않는다.
스프링 부트 생성자 바인딩이 안될 때
스프링 부트 3.2 또는 스프링 프레임워크 6.1 이상 사용 시 생성자 바인딩이 안 될 때, -parameters 컴파일러 옵션을 추가하여 해결할 수 있다.
castarray.github.io
728x90