본문 바로가기

BackEnd : Spring/Spring MVC

[Spring MVC] 스프링 부트 3.2 매개변수 이름 인식 문제

오류 내용

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

주로 @RequestParam, @PathVariable 애노테이션에서 발생하는 문제라고 한다.

오류 코드

@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor //기본 생성자 자동으로 만들어줌
public class BasicItemController {

    private final ItemRepository itemRepository;

    @GetMapping
    public String items(Model model) {
        List<Item> items = itemRepository.findAll();
        model.addAttribute("items",items);
        return "basic/items";
    }

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

    @PostConstruct
    public void init() {
        itemRepository.save(new Item("itemA",10000,10));
        itemRepository.save(new Item("itemB",20000,20));
    }
}

item 메소드에서 @PathVariable 애노테이션에 이름을 지정해 주지 않아 상품 조회 화면에서 각 상품 조회 화면으로 이동할 때 오류가 발생했다.

해결 방법

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

애노테이션에 파라미터 이름을 지정해 준다.

다른 해결 방법

settings > Build, Execution, Deployment > Compiler > Java Compiler에서

저기 파란 테두리 부분에 -parameters 를 추가해준다.

out 폴더를 삭제하고 다시 실행해주면 된다.