BackEnd : Spring/Spring MVC
[Spring MVC] 스프링 부트 3.2 매개변수 이름 인식 문제
snoony
2024. 5. 2. 23:21
오류 내용
스프링 부트 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 폴더를 삭제하고 다시 실행해주면 된다.