참고 : 인프런 [ 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 김영한 ]
@GetMapping("/items/{itemId}/edit")
public String updateItemForm(@PathVariable("itemId") Long itemId, Model model){
Book item = (Book) itemService.findOne(itemId); //예제를 단순하게 하기 위해서 Book을 바로 캐스팅
BookForm form = new BookForm();
form.setId(item.getId());
form.setName(item.getName());
form.setPrice(item.getPrice());
form.setStockQuantity(item.getStockQuantity());
form.setAuthor(item.getAuthor());
form.setIsbn(item.getIsbn());
model.addAttribute("form", form);
return "items/updateItemForm";
}
@PostMapping("/items/{itemId}/edit")
public String updateItem(@ModelAttribute("form") BookForm form){
Book book=new Book();
book.setId(form.getId());
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());
itemService.saveItem(book);
return "redirect:/items";
}
@PathVariable 어노테이션
- Spring MVC에서 사용되는 어노테이션
- URL 경로의 일부를 메소드 매개변수로 바인딩할 때 사용
- RESTful 웹 서비스에서 클라이언트가 보낸 요청 URL의 일부를 메소드 파라미터로 사용할 때 매우 유용
@ModelAttibute 어노테이션
- Spring MVC에서 사용되는 어노테이션
- 요청 매개변수를 바인딩하고 모델에 데이터를 추가할 때 사용
- 주로 폼 데이터 처리와 함께 사용되며, 컨트롤러 메서드의 파라미터나 반환 값에 사용
...

변경 후

주의 : 누군가가 아이디를 임의적으로 조작해서 넘기고 상품을 수정한다면, 의도치 않은 데이터가 수정될 수 있다.
=> 서비스 계층의 앞단 혹은 뒷단에서 이 유저가 아이템에 대해서 권한이 있는지 없는지 확인하는 로직이 필요하다.