본문 바로가기

WEB/Spring

[Spring] IllegalArgumentException 에러(매개변수 이름 인식)

김영한님의 스프링 MVC 1편 강의를 듣는 중 발생한 에러입니다.

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

 

문제가 됐던 코드는 다음과 같습니다.

@GetMapping("/{itemId}")
    public String item(@PathVariable Long itemId, Model model) {
        Item item = itemRepository.findById(itemId);
        model.addAttribute("item", item);
        return "basic/item";
    }

 

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

문제가 자주 발생하는 애노테이션은 @RequestParam, @PathVariable, @Autowired 3가지 입니다.

 

저는 코드를 다음과 같이 수정했습니다.

@GetMapping("/{itemId}")
    public String item(@PathVariable("itemId") Long itemId, Model model) {
        Item item = itemRepository.findById(itemId);
        model.addAttribute("item", item);
        return "basic/item";
    }

 

PathVariable에 ("itemId")라는 이름을 적어서 오류를 해결할 수 있었습니다.

 


 

Build and run using을 IntelliJ IDEA로 선택한 경우 Gradle로 변경하여 문제를 해결할 수 있습니다.

Build, Execution, Deployment -> Build Tools -> Gradle

 

현재 저는 intelliJ IDEA로 설정이 되어 문제가 발생합니다. Gradle로 변경하면 Gradle이 컴파일 시점에 해당 옵션을 자동으로 적용합니다.

 

참조

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1