반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- abap value in field Data Class error
- filter vs interceptor
- .orelseThrow
- 구글 보안 api 활용
- 김영한
- 쿠키란
- 401오류
- 유연한 컨트롤러1 - v5
- jpa
- controller
- spring MVC
- n+1
- MVC
- 인터셉터의 정의
- optional
- 세션이란
- Validation
- 세션vs쿠키
- 필터의 정의
- BindingResult
- Testcode
- springSecurityFilterChain 오류
- SpringMVC
- @Controller
- application-properties
- 세션의 정의
- java.lang.AssertionError
- spring
- 필터vs인터셉터
- 쿠키의 정의
Archives
- Today
- Total
ABAP DUMP ERROR 24시
BindingResult , add FieldError=-> rejectValue 변환 본문
반응형
# 인프런 김영한의 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술을 개인적으로 정리한 글입니다.
정리
bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null));
addError(new FieldError())
대신에 rejectValue를 사용하자
bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
장점
자세히 보면 item 이라는 객체의 생략
item.getPrice라는 에러 보관함 생략
new String[]{"range.item.price"} 라는 구체적인 명시 대신 "range"로 간편하게 축약
살펴보기
과거 new FieldError("")를 통해 에러 메세지를 주입하였다.
더 줄일수는 없을까?
log.info("objectName = {}", bindingResult.getObjectName());
log.info("target = {}", bindingResult.getTarget());
bindingResult에 대한 로그를 찍어보니
이미 bindingResult는 Item이라는 파라미터 뒤에 위치하므로
Item 객체를 가지고있다!
/ @PostMapping("/add")
// public String addItemV3(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes){
// if(!StringUtils.hasText(item.getItemName())){
// bindingResult.addError(new FieldError("item", "itemName", item.getItemName(), false, new String[]{"required.item.itemName"}, null,null));
// }
// if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000){
// bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null));
// }
// if(item.getQuantity() == null || item.getQuantity() > 10000){
// bindingResult.addError(new FieldError("item" , "quantity", item.getQuantity(),false,new String[]{"max.item.quantity"}, new Object[]{9999}, null));
// }
//
// if (item.getPrice() != null && item.getQuantity() != null){
// int resultPrice = item.getPrice() * item.getQuantity();
// if (resultPrice < 10000){
// bindingResult.addError(new ObjectError("item", new String[]{"totalPriceMin"}, new Object[]{10000, resultPrice}, null));
// }
// }
//
// if (bindingResult.hasErrors()){
// log.info("errors={}", bindingResult);
// return "validation/v2/addForm";
// }
//
// Item savedItem = itemRepository.save(item);
// redirectAttributes.addAttribute("itemId", savedItem.getId());
// redirectAttributes.addAttribute("status", true);
// return "redirect:/validation/v2/items/{itemId}";
// }
이랬던 코드가
@PostMapping("/add")
public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes){
log.info("objectName = {}", bindingResult.getObjectName());
log.info("target = {}", bindingResult.getTarget());
if(!StringUtils.hasText(item.getItemName())){
bindingResult.rejectValue("itemName", "required");
}
if(item.getPrice() == null || item.getPrice()< 1000 || item.getPrice() > 1000000){
bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
}
if(item.getQuantity() == null || item.getQuantity() >10000){
bindingResult.rejectValue("quantity", "max", new Object[]{9999}, null);
}
if(item.getPrice() != null && item.getQuantity() != null){
int resultPrice = item.getPrice() * item.getQuantity();
if(resultPrice < 10000){
bindingResult.reject("totalPriceMin" , new Object[]{10000, resultPrice}, null);
}
}
if(bindingResult.hasErrors()){
log.info("errors={}", bindingResult);
return "validation/v2/addForm";
}
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("item", savedItem.getId());
redirectAttributes.addAttribute("status", true);
return "redirect:/validation/v2/items/{itemId}";
}
반응형
'[WEB]Back-end > Spring MVC' 카테고리의 다른 글
[SpringMVC 2편] Login 기능 추가하기. (0) | 2022.02.25 |
---|---|
Validator interface 활용하기 (0) | 2022.02.22 |
BindingResult Version3 properties를 활용한 동적 변경 (0) | 2022.02.20 |
BindingResult를 활용한 Validation 처리 [전 vs 후(version1,2) ] (0) | 2022.02.19 |
Thylmleaf 간단 용어 정리 (0) | 2022.02.18 |
Comments