스프링

 

 

  <tr th:each="cartItem : ${cartItems}">
        <td class="text-center align-middle">
          <input type="checkbox" name="cartChkBox" th:value="${cartItem.cartItemId}">
        </td>

      </tr>

 

1. js

   function orders(){
          const token=$("meta[name='_csrf']").attr("content");
          const header=$("meta[name='_csrf_header']").attr("content");

          const url="/cart/orders";

          const dataList=new Array();
          const paramData=new Object();

          $("input[name=cartChkBox]:checked").each(function(){
              const cartItemId=$(this).val();
              const data=new Object();
              data["cartItemId"]=cartItemId;
              dataList.push(data);
          })

          paramData["cartOrderDtoList"]=dataList;

          const param=JSON.stringify(paramData);
          console.log("dataList : ",dataList);
          console.log("paramData : ",dataList);

          $.ajax({
            url:url,
            type:"POST",
            beforeSend:function (xhr){
              // 데이터를 전송하기 전에 헤더에 csrf값을 설정
              xhr.setRequestHeader(header,token);
            },
            dataType:"json",
            cache:false,
            contentType:"application/json",
            data:param,
            success:function(result,status){
              alert("주문이 완료 되었습니다.");
              location.href="/orders";
            },
            error:function(jqXHR, status, error){
               console.log(" 에러  : jqXHR : ", jqXHR, "   =====status:   ",  status, "   ===== error:  ", error);
                if(jqXHR.status =='401'){
                    alert("로그인 후 이용해주세요.");
                    location.rhref="/members/login";
                }else{
                  alert(jqXHR.responseJSON.message);
                }
            }
          })

        }

 

 

 

 

 

DTO

import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Setter
@Getter
public class CartOrderDto {

    private Long cartItemId;

    /** 장바구니에서 여러 개의 상품을 주문하므로 CartOrderDto 클래스가 자기 자신을 가지고 있도록 cartOrderDtoList 변수 생성 */
    private List<CartOrderDto> cartOrderDtoList;

}

 

 

3. constroller

    /**
     * 장바구니에서  주문
     */

    @PostMapping(value = "/cart/orders")
    @ResponseBody
    public ResponseEntity<?>  orderCartItem(@RequestBody CartOrderDto cartOrderDto, @AuthenticationPrincipal  PrincipalDetails principalDetails){
        List<CartOrderDto> cartOrderDtoList = cartOrderDto.getCartOrderDtoList();

        if(cartOrderDtoList==null || cartOrderDtoList.size()==0){
            return ResponseEntity.status(HttpStatus.FORBIDDEN).body("주문할 상품을 선택해 주세요.");
        }

        for(CartOrderDto cartOrder : cartOrderDtoList){
            if(!cartService.validateCartItem(cartOrder.getCartItemId(), principalDetails.getEmail())){
                return ResponseEntity.status(HttpStatus.FORBIDDEN).body("주문 권한이 없습니다.");
            }
        }

        Long orderId=cartService.ordrerCartItem(cartOrderDtoList, principalDetails.getEmail());
        return ResponseEntity.status(HttpStatus.OK).body(orderId);
    }

 

 

 

 

소스 :https://github.com/braverokmc79/jpa-shop-test2

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

현재나 미래에 있어 이 말은 잊지 말라. 인생은 헛된 꿈이 아니다. 영원을 바탕으로 하고 영원에 싸여있는 존귀한 실재( 實在 )인 것을. -로맹 롤랑

댓글 ( 0)

댓글 남기기

작성