jakarta.servlet.ServletException: Request processing failed: 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.
테스트 코드를 돌리고 있는데 갑자기 이런 오류가 나왔다.. 갑자기 처음 보는 오류가 나와서 당황,,
해석을 해보니 파라미터를 못찾는 문제 같은데 왜 갑자기 이런 오류가 나왔는지 궁금하다.
김영한 님께서 이와 유사한 질문에 대한 글에 답을 이미 해 주신 상태였다. 역시 갓
해결방법이 총 3가지가 있다고 한다.
1. 애노테이션 생략 X
스프링 부트 3.2부터 자바 컴파일러에 -parameters 옵션을 넣어주어야 애노테이션의 이름을 생략할 수 있다고 한다.
@RequestMapping("/request")
public String request(@RequestParam("username") String username) {
...
}
이런 식으로
원래 요청 파라미터의 이름과 메서드의 매개변수 이름이 일치하지 않을 때 명시적으로 파라미터의 이름을 지정해줘야 하고 매개변수 이름과 요청 파라미터의 이름이 동일하면 생략할 수 있는데 어찌 된 거지,,,
2. 컴파일 시점에 -parameters 옵션 적용
- IntelliJ IDEA에서 File -> Settings를 연다. (Mac은 IntelliJ IDEA -> Settings)
- Build, Execution, Deployment → Compiler → Java Compiler로 이동한다.
- Additional command line parameters라는 항목에 다음을 추가한다.
-parameters - out 폴더를 삭제하고 다시 실행한다. 꼭 out 폴더를 삭제해야 다시 컴파일이 일어난다.
근데 나는 Java Compiler에 Additional command line parameters 이 항목이 보이지 않아서 이 방법은 패스,,
3. 빌드를 Grdle 방식으로
빌드를 할 때 gradle방식과 IntelliJ IDEA 방식이 있는데 나는 Intelli IDEA 방식을 사용하고 있다.
Gradle로 선택하면 컴파일 시점에서 해당 옵션을 자동으로 적용해 준다.
변경하는 방법은 Settings -> Build, Execution, Deployment -> Build Tools -> Gradle
나는
코드의 변경을 굳이 하고 싶지 않아서 3번 방식으로 문제를 해결
참고자료: 인프런 질문
'Spring' 카테고리의 다른 글
[Spring] JUnit을 이용한 단위 테스트, 통합 테스트 (0) | 2023.09.20 |
---|---|
단위 테스트, 통합 테스트 (0) | 2023.09.14 |
DDD(Domain Driven Desgin) (0) | 2023.07.25 |
프로젝트 패키지 구조는 어떻게 나누는게 좋을까 (0) | 2023.07.14 |
[Spring] 왜 Service 와 ServiceImpl로 나누는걸까 (0) | 2023.06.28 |