spring
Validation V3
noAb
2024. 5. 14. 15:58
Validation V2에 이어 이번에는 오류메세지를 받아오면서 입력받은 값을 유지하는 방법을 소개하려고한다.
변화하는건 bindingResult에 field나 globalErrors를 담을 때 인자를 변경하면 된다.
기존의 new FieldError는
if(!StringUtils.hasText(item.getItemName())) { // 상품이름이 없으면
bindingResult.addError(new FieldError("item","itemName","상품이름은 필수입니다."));
}
if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000){ //상품가격이 1000에서 1000000사이가 아닐경우
bindingResult.addError(new FieldError("item","price","가격은 1,000에서 1,000,000까지 허용합니다."));
}
if(item.getQuantity()==null|| item.getQuantity() >= 9999) { //수량이 9999가 넘어간경우
bindingResult.addError(new FieldError("item","quantity","수량은 최대 9,999 까지 허용합니다."));
}
이런식으로 인자로 objectName, filed, defaultMessage 순서로 받앗는데, BindingResult 이전에 받은 ModelAttribute에 담긴 값을 유지하는 것이므로 인자를 objectName, field, 값, bindingFailuer, codes,arguments, defaultMessage로 변경하면 된다.
//검증 로직
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(),false,null,null,"상품이름은 필수입니다."));
}
if(item.getQuantity()==null|| item.getQuantity() >= 9999) {
bindingResult.addError(new FieldError("item","quantity",item.getQuantity(),false,null,null,"상품이름은 필수입니다."));
}
field가 존재하는 값은 위와 같이 하면 되는데 field가 존재하지 않는 globalErrors는 인자를 어떻게 받으면 될까
bindingResult.addError(new ObjectError("item","가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice));
위의 이전의 objectName, defaultMessage에서
bindingResult.addError(new ObjectError("item",null,null,"가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice));
이처럼 변경하면 된다 objectName, codes,arguments,defaultMessage의 순서이다.
html파일은 수정하지 않아도 된다.
결과 화면을 보게 되면

조건에 맞지 않는 값을 넣고 저장을 눌렀을때 값을 유지한채 에러 메세지를 노출하게 된다.
다음 V4글에서는 오류 메세지의 일관성을 두기 위한 방법을 소개하려고한다.
p.s 블로그에 소개되는 Validation의 글들은 인프런 김영한님의 스프링 활용의 강의 내용을 정리한 내용입니다.