상품 주문 및 목록 만들기(2)

노건우·2023년 9월 27일
0

Spring

목록 보기
10/22

검증을 확인하는 2가지 방법

//@PostMapping("/add")
	public String saveItemV7(Item item, BindingResult bindingResult,
			RedirectAttributes redirectAttributes) {
		if(!StringUtils.hasText(item.getItemName())) {
			bindingResult.addError(
					//FieldError : feild 단위의 error는 spring에서 제공해주는 객체
					new FieldError("item","itemName","상품이름은 필수입니다"));
		}
		if(item.getPrice() == null || item.getPrice() < 1000  || item.getPrice() >1000000) {
			bindingResult.addError(
					new FieldError("item","price","가격은 1,000, ~1,000,000 까지 허용"));
		}
		if(item.getQuantity() == null || item.getQuantity() >10000) {
			bindingResult.addError(
					new FieldError("item","quantity","수량은 최대 9,999까지 허용"));
		}
			//검증에 실패한다면 다시 입력 폼
		if(bindingResult.hasErrors()) {
			System.out.println("errors : " + bindingResult);
			return "basic/addForm";
		}
		Item savedItem = itemRepository.save(item);
		redirectAttributes.addAttribute("status", true);
		return "redirect:/basic/items/"+ item.getId();
	}
//@PostMapping("/add")
	public String saveItemV8(Item item, BindingResult bindingResult,
			RedirectAttributes redirectAttributes) {
		if(!StringUtils.hasText(item.getItemName())) {
			bindingResult.addError(
					new FieldError("item","itemName", item.getItemName(),
							false, null, null, "상품이름은 필수입니다"));
		}
		if(item.getPrice() == null || item.getPrice() < 1000  || item.getPrice() >1000000) {
			bindingResult.addError(
					new FieldError("item","price",item.getPrice(),
							true,null,null,"가격은 1,000, ~1,000,000 까지 허용"));
		}
		if(item.getQuantity() == null || item.getQuantity() >10000) {
			bindingResult.addError(
					new FieldError("item","quantity",item.getQuantity(),
							false,null,null,"수량은 최대 9,999까지 허용"));
		}
			//검증에 실패한다면 다시 입력 폼
		if(bindingResult.hasErrors()) {
			System.out.println("errors : " + bindingResult);
			return "basic/addForm";
		}
		Item savedItem = itemRepository.save(item);
		redirectAttributes.addAttribute("status", true);
		return "redirect:/basic/items/"+ item.getId();
	}

다음 두 코드는 컨트롤러단에서 검증을 확인하는 두 개의 다른 메서드이다.

✍️어떤 점에서 두 메서드는 차이가 있는가?

첫번째 메서드는 하드코딩이다. 에러 메시지를 일일이 하나하나 써줘야 하기에 유지보수에 있어 취약하다. 두번째 메서드는 에러 메시지를 코드 내에서 직접 문자열로 지정하지 않고, 메시지 코드를 사용한다. new FieldError("item", "itemName", item.getItemName(), false, null, null, "상품이름은 필수입니다") 코드만 봐도 에러 메시지를 null로 지정하고 있다.

html 코드

<div>
						<div>등록 지역</div>
						<div th:each="region : ${regions}" class="form-check form-check-inline">
							<input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input">
							<label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label>
						</div>

addForm.html코드

<div>
			<div>등록 지역</div>
			<div th:each="region : ${regions}" class="form-check form-check-inline">
				<input type="checkbox" th:field="${item.regions}" th:value="${region.key}" class="form-check-input" disabled>
				<label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label>
			</div>
		</div>

item.html코드

둘의 차이는 무엇이라고 보는가? item은 item이라는 모델 속성의 open을 사용하고 있다.

profile
초보 개발자 이야기

0개의 댓글

관련 채용 정보