절개와지조 1차 모각코

2023. 7. 6. 20:10·모각코
728x90

상품 등록 폼에 관련한 검증 로직을 작성해보고 HTML파일에서 타임리프를 적용해보는 실습을 진행한다.

@PostMapping("/add")
  public String addItem(@ModelAttribute Item item, RedirectAttributes
  redirectAttributes, Model model) {
	//검증 오류 결과를 보관
	Map<String, String> errors = new HashMap<>();
	//검증 로직
	if (!StringUtils.hasText(item.getItemName())) {
	errors.put("itemName", "상품 이름은 필수입니다.");
	}
      if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() >1000000) {
			errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다."); }
	if (item.getQuantity() == null || item.getQuantity() >= 9999) { 
    	errors.put("quantity", "수량은 최대 9,999 까지 허용합니다.");
	}
//특정 필드가 아닌 복합 룰 검증
if (item.getPrice() != null && item.getQuantity() != null) {
          int resultPrice = item.getPrice() * item.getQuantity();
          if (resultPrice < 10000) {
				errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice);
			} 
		}
//검증에 실패하면 다시 입력 폼으로 
if (!errors.isEmpty()) {
          model.addAttribute("errors", errors);
          return "validation/v1/addForm";
      }
//성공 로직
	Item savedItem = itemRepository.save(item); 
	redirectAttributes.addAttribute("itemId", savedItem.getId()); 
    redirectAttributes.addAttribute("status", true);
	return "redirect:/validation/v1/items/{itemId}";
}

 

Map<String, String> errors = new HashMap<>();

만약 검증시 오류가 발생하면 어떤 검증에서 오류가 발생했는지 정보를 담아둔다.

if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 이름은 필수입니다.");
}

검증시 오류가 발생하면 errors 에 담아둔다. 이때 어떤 필드에서 오류가 발생했는지 구분하기 위해 오류가 발생한 필드명을 key 로 사용한다. 이후 뷰에서 이 데이터를 사용해서 고객에게 친절한 오류 메시지를 출력할 수 있다.

특정 필드를 넘어서는 오류를 처리해야 할 수도 있다. 이때는 필드 이름을 넣을 수 없으므로 globalError 라는 key 를 사용한다.

if (item.getPrice() != null && item.getQuantity() != null) {
      int resultPrice = item.getPrice() * item.getQuantity();
      if (resultPrice < 10000) {
		errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice);
	} 
}

 

검증에 실패하면 다시 입력 폼으로

  if (!errors.isEmpty()) {
      model.addAttribute("errors", errors);
      return "validation/v1/addForm";

}

만약 검증에서 오류 메시지가 하나라도 있으면 오류 메시지를 출력하기 위해 model 에 errors 를 담고, 입력 폼이 있는 뷰 템플릿으로 보낸다.

글로벌 오류 메시지

<div th:if="${errors?.containsKey('globalError')}">
	<p class="field-error" th:text="${errors['globalError']}">전체 오류 메시지</p>
</div>

오류 메시지는 errors 에 내용이 있을 때만 출력하면 된다. 타임리프의 th:if 를 사용하면 조건에 만족할 때만 해당 HTML 태그를 출력할 수 있다.

 

728x90

'모각코' 카테고리의 다른 글

절개와 지조 3차 모각코  (0) 2023.07.13
절개와 지조 2차 모각코  (0) 2023.07.08
눈이 녹으면 Spring-MVC 1월 31일 8회차  (0) 2023.01.31
눈이 녹으면 Spring-MVC 1월 30일 7회차  (2) 2023.01.30
눈이 녹으면 Spring-MVC 1월 24일 6회차  (1) 2023.01.24
'모각코' 카테고리의 다른 글
  • 절개와 지조 3차 모각코
  • 절개와 지조 2차 모각코
  • 눈이 녹으면 Spring-MVC 1월 31일 8회차
  • 눈이 녹으면 Spring-MVC 1월 30일 7회차
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    8기
    오블완
    DFS
    BFS
    회고록
    JPA
    절개와지조
    감자
    누적합
    백준
    모각코
    뛰슈
    프리코스
    그래프 순회
    어렵다
    나는 감자
    자바
    Spring
    타임리프
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
절개와지조 1차 모각코
상단으로

티스토리툴바