//Controller
//ResponsBody 값 반환할 때 필요
//requestBody == 여러값을 다 받아옴(toString형식)
//requestParam == 그 값들을 1:1 매칭시켜줌

//JS

/*
	//vo값을 보내는 경우
	JSON.stringfy
	contentType: 'application/json'
	ajax에 두 옵션이 있어야 한다
	받을 때는
	Requestbody <Type> 변수명 

	//requestParam으로 보내는 경우
	data:  {'cartno':cartno}

	//반환값 종류
	dataType: 'json' or 'text' 등

	//문자열 값을 전송하는 경우
	contentType: 'application/json'
*/

@ResponseBody
@PostMapping("order/saveOption")
public int saveOption(@RequestBody CartVO vo) {
	System.out.println(vo.getColor());
	return 1;
}
/* 옵션변경확인버튼 */
$('#saveOption').click(function(){
	if($('#optionTable td > div.size > input[name=chkSize]').is(':checked')){
    let color = $('#optionTable td > div.color > input[name=chkColor]:checked').val();
    let size = $('#optionTable td > div.size > input[name=chkSize]:checked').val();
		let cartNo = $('#modalCartNo').val();
		let vo = {
			'cartNo':cartNo,
			'color'	:color,
			'size'	:size
		}
	  $.ajax({
			url:'/Beauty/order/saveOption',
			type:'POST',
			data: JSON.stringify(vo),
			dataType:'json',
			contentType: 'application/json',
			success:function(data){
				//todo
			},
			error: function() {
	      alert('error 장바구니');
      }
		});
		
  }else{
      alert('옵션을 선택해주세요');
      return;
  }
});

//배열의 경우

@ResponseBody
@PostMapping("product/order")
public int order(Model model, @RequestBody List<OrderItemVO> orderList) {
	model.addAttribute("orderList", orderList);
	return 1;
}

https://vitalholic.tistory.com/411