@Getter @Setter public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; private Boolean open; private List<String> regions; private ItemType itemType; private String deliveryCode; public Item() {} public Item(Long id, String itemName, Integer price, Integer quantity) { super(); this.itemName = itemName; this.price = price; this.quantity = quantity; }
Spring 컨테이너 내부에서
Item() 데이터를 사용자와 주고 받는 예제 이다.
regions, itemType, deliveryCode 는 개발자가 명시된 범위에서 사용자가 요청하게 된다.
해당 비지니스 로직은
사용자의 itemId 를 조회하여 item() 데이터를 수정하는 로직이다.
item 수정은 메소드가 2개 필요하다
1 - 수정 할 상품을 조회할 메소드 ( GET )
2 - 수정 된 상품을 저장 후 redirect 로 사용자에게 요청처리 할 메소드
1-1. item 조회 Controller 메소드
@GetMapping("/{itemId}/edit") public String editForm( @PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/editForm"; }
editForm.html 에서
item 객체의 정보를 사용자에게 할당받는다.
1-2. item 조회 Repository 메소드
public Item findById(Long itemId) { return store.get(itemId); } store 에는 HashMap 타입으로 Key 값은 itemId, value 값으로 item 데이터가 담겨져 있다. private static final Map<Long, Item> store = new HashMap<Long, Item>();
2-1. item 수정 후 redirect 요청처리 메소드
@PostMapping("/{itemId}/edit") public String edit( @PathVariable Long id , @ModelAttribute Item item) { itemRepository.update(id, item); return "redirect:/basic/items/{itemId}"; }
editForm 에서 할당받은 사용자의 데이터를
item Repository 를 통해 update(수정) 시킨 후
redirect 방식으로
items.html 에 적용시킨다.
2-2. item 수정 Repository 메소드
public void update(Long itemId , Item updateParam) { // 수정할 아이템 id 를 조회 Item findItem = findById(itemId); // 조회된 id 의 값의 모든 정보를 사용자가 입력한 정보로 수정(=update) findItem.setItemName(updateParam.getItemName()); findItem.setPrice(updateParam.getPrice()); findItem.setQuantity(updateParam.getQuantity()); findItem.setOpen(updateParam.getOpen()); findItem.setRegions(updateParam.getRegions()); findItem.setItemType(updateParam.getItemType()); findItem.setDeliveryCode(updateParam.getDeliveryCode()); }