스프링
-
상품 수정 검증, 검증 groups - V3스프링/스프링 MVC 패턴 2023. 2. 25. 16:50
@PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @Validated @ModelAttribute Item item, BindingResult bindingResult) { if (item.getPrice() != null && item.getQuantity() != null ) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.addError(new ObjectError("item", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice)); } ..
-
스프링 자동 검증기(Bean Validation)스프링/스프링 MVC 패턴 2023. 2. 25. 16:38
검증을 일일이 개발자가 코딩을 하는 방법은 매우 비효율적이기에 스프링은 LocalValidatorFactoryBean이라는 글로벌 Validator로 등록된다. @Data public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; Item 객체에 애노테이션들을 넣어주면 우리가 이전까지 했던 모든 검증을 스프링에서 자동으로 해준다. 우리가 이전 게시글에서 엄청 길게 작성된 코드들이 간편하게 애노테이션 몇 개로 줄여질 수 있다. impleme..
-
Validation 분리스프링/스프링 MVC 패턴 2023. 2. 23. 15:23
컨트롤러에서 검증하는 로직이 너무 많이 차지하고 실제 동작 로직은 비중이 작다. 따라서 검증하는 클래스를 따로 분리해서 만드는 것이 효율적이다. ItemValidator 클래스 import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; @Component public class ItemValidator implements Validator { @Override public boolean supports(Class..
-
오류 코드와 메시지 처리스프링/스프링 MVC 패턴 2023. 2. 23. 14:44
FieldError는 2가지의 생성자를 제공한다. public FieldError(String objectName, String field, String defaultMessage); public FieldError(String objectName, String field, @Nullable Object rejectedValue, boolean bindingFailure, @Nullable String[] codes, @Nullable Object[] arguments, @Nullable String defaultMessage) 첫 번째는 위에서 계속 소개한 방식이고 두 번째는 다음과 같다. bindingResult.addError(new FieldError("item", "itemName", item...
-
상품 등록 범위 검증 - V2 (BindingResult)스프링/스프링 MVC 패턴 2023. 2. 23. 13:18
이전 게시글보다 효율적인 방법이 있다. 코드를 간결하고 명확하게 줄여주는 방법이다. 스프링에서 제공하는 BindingResult를 사용하면 된다. @PostMapping("/add") public String addItem(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { // BindingResult는 무조건 @ModelAttribute 다음에 넣어야함 메서드의 파라미터에서 @ModelAttribute 다음에 BindingResult를 넣어준다. bindingResult.addError(new FieldError("item", "itemName", "상품 이..
-
상품 등록 범위 검증 - V1스프링/스프링 MVC 패턴 2023. 2. 22. 19:23
상품 등록 페이지를 만들었는데, 상품명을 입력하지 않아도 상품으로 등록되고, 가격과 수량을 아무렇게나 입력해도 등록이 된다. 실제로는 이렇게 사용하면 안되니까 몇 가지의 제한을 걸 것이다. 상품명 : 빈칸이면 안됨 수량 : 최대 9999개까지 허용 가격 : 1000원~100만원까지 허용 수량 * 가격이 10000원 이상이어야지만 등록 가능 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { // 검증 오류 결과를 보관 Map errors = new HashMap(); // 검증 로직 if (!StringUtils.hasText(item...
-
셀렉트 박스 (배송 방식 : 빠른 배송, 일반 배송, 느린 배송)스프링/스프링 MVC 패턴 2023. 2. 19. 15:32
우선 item 객체에 deliveryCode를 추가해준다. @ModelAttribute("deliveryCodes") public List deliveryCodes() { List deliveryCodes = new ArrayList(); deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송")); deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송")); deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송")); return deliveryCodes; } 모델에 DeliveryCode의 리스트를 넘길 수 있도록 해주는 @ModelAttribute를 만들어준다. 배송 방식 ==배송 방식 선택..
-
라디오 버튼 (상품 종류 : 도서, 식품, 기타)스프링/스프링 MVC 패턴 2023. 2. 19. 15:19
ItemType enum 생성 package hello.itemservice.domain.item; public enum ItemType { BOOK("도서"), FOOD("음식"), ETC("기타"); private final String description; ItemType(String description) { this.description = description; } public String getDescription() { return description; } } enum을 이용한 코드를 만들 예정이니 enum을 생성해주었다. @ModelAttribute("itemTypes") public ItemType[] itemTypes() { ItemType[] values = ItemType.va..