상품을 등록할 때 상품의 이름을 등록하지 않거나, 수량, 가격 등이 너무 작거나 검증범위를 벗어나게 되면 서버 검증 로직에서 실패해야한다.
검증 로직을 추가
@PostMapping("/add")
public String addItem(@ModelAttribute("item") Item item, RedirectAttributes redirectAttributes
,Model model){
Map<String,String> errors = new HashMap<>();
//상품명은 필수
if(!StringUtils.hasText(item.getItemName())){
errors.put("itemName","상품 이름은 필수 입니다.");
}
//가격은 1000원이상 1백만원 이하
if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) {
errors.put("price","가격은 1000 ~ 1000000 까지 허용합니다.");
}
//수량은 최대 9999
if(item.getQuantity() == null || item.getQuantity() > 9999){
errors.put("quantity","수량은 최대 9999까지 가능합니다.");
}
//가격 * 수량의 합은 10000원을 넘어야한다.
if(item.getPrice() != null && item.getQuantity() != null){
int resultPrice = item.getPrice() * item.getQuantity();
if(resultPrice < 10000){
errors.put("globalerror","가격 * 수량의 합은 10000원 이상이여야합니다. 현재값 = " + resultPrice);
}
}
if(!errors.isEmpty()){
model.addAttribute("errors",errors);
return "validation/v1/addForm";
}
itemRepository.save(item);
redirectAttributes.addAttribute("itemId",item.getId());
redirectAttributes.addAttribute("status",true);
return "redirect:/validation/v1/items/{itemId}";
}
isEmpty()
- 문자열이 null인지 확인
hasLength()
- 문자열이 null인지 "" 인지 확인
- hasLength()의 경우 " " 와 같은 공백 문자열에 관해서 True를 반환함.
- 공식문서에서는 hasLength()를 사용하는 걸 권장함.
hasText()
- 문자열이 text 형태인지 확인
- null을 포함해서 공백만 존재시 false를 반환
containsWhitespace()
- 문자열이 공백을 포함하고 있는지 아닌지 검증