오류해결(매핑단어 오류)

이소연's avatar
Aug 05, 2024
오류해결(매핑단어 오류)
 
구매결정하기 뷰를 구현을 하려는데
@GetMapping("/purchase/{id}/purchase-form") public String purchaseForm(@PathVariable Integer id, HttpServletRequest request){ Purchase purchase = purchaseService.findById(id); System.out.println("purchase= " + purchase); request.setAttribute("purchase",purchase); return "purchase/purchase-form"; }
이렇게 하니까 계속 메서드를 찾을 수 없다고 400 500 오류가 뜸
 
이유는) 구매하기 뷰에서의 상품은 아직 구매하기 전의 상품이다! 아직 구매를 안했는데 구매가?!
즉, id는 구매한 것의 상품(purchase)이 아닌 상품의 상품(product)인 것이다.
그래서 코드를 purchase 한 것을 product으로 바꾸어 주면 성공!
@GetMapping("/purchase/{id}/purchase-form") public String purchaseForm(@PathVariable Integer id, HttpServletRequest request){ Product product = productService.findById(id); System.out.println("product = " + product); request.setAttribute("product",product); return "purchase/purchase-form"; }
💡
해석)
@GetMapping("/purchase/{id}/purchase-form") purchase폼을 id로 요청하면 public String purchaseForm(@PathVariable Integer id, HttpServletRequest request){ id로 상품을 찾을 거니까 Product product = productService.findById(id); 상품의 아이디로 찾아온다. System.out.println("product = " + product); 그것을 상품이라고 칭한다. request.setAttribute("product",product); 그 상품의 이름을 "상품"이라고 정한다. return "purchase/purchase-form"; purchase 폼이 리턴이 되지. }
 
구매결정 폼(purchase-form.mustache)
-그래서 여기의 키워드 id와 상품 정보들도 product로 만들어야 말이 맞다.
하지만 그렇게 하면 purQty도 product으로?! 노노노
왜냐면 {{ }} 이것들은 내가 값을 미리 정해놓고, 불러오는 건데
구매수량은 고객이 정하는거니까 내가 안 적어 놔도 된다. 그래서 value는 여기에 없어도 된다. 구매자에게 받아오자!
{{> layout/header}} <div class="d-flex justify-content-center" style="margin-top: 100px; margin-bottom: 100px;"> <form action="/purchase/{{product.id}}" method="post"> <div class="p-3 m-3" style="width: 300px;"> <div class="mb-3 mt-3"> 상 품 명 : <input name="name" type="text" class="form-control" value="{{product.name}}" readonly> </div> <div class="mb-3 mt-3"> 상품가격 : <input name="price" type="number" class="form-control" value="{{product.price}}" readonly> </div> <div class="mb-3 mt-3"> 상품수량 : <input name="qty" type="number" class="form-control" value="{{product.qty}}" readonly> </div> <div class="mb-3 mt-3"> 구매수량 : <input name="purQty" type="number" class="form-control" placeholder="Enter your purchase amount" required> </div> <div class="d-flex justify-content-center"> <button type="submit" class="btn btn-primary mt-3">구매결정</button> </div> </div> </form> </div> {{> layout/footer}}
 
 
세션에 로그인한 buyer정보 넣기
넣은거 purchasecontroller에서 session 가져와서 buyerid 불러오기
Share article

Coding's note