Validator란 검증기이다
interface로 되어있으며
supports 와 validate 메서드를 override해서 사용 할 수 있다.
supports 메서드
@Override
public boolean supports(Class<?> clazz) {
return Item.class.isAssignableFrom(clazz);
//item == clazz
//item == 자식 클래스
}
파라미터로 item이나 item의 자식 클래스가 들어오면
true를 반환하고 validate 메서드를 사용할 수 있게 해준다.
validate 메서드
@Override
public void validate(Object target, Errors errors) {
Item item = (Item) target;
//검증 로직 글자가 없으면
if (!StringUtils.hasText(item.getItemName())) {
errors.rejectValue("itemName","required");
}
if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) {
errors.rejectValue("price","range", new Object[]{1000,1000000},null);
}
if (item.getQuantity() == null || item.getQuantity() > 10000) {
errors.rejectValue("quantity","max", new Object[]{9999},null);
}
//복합 룰 검증
if(item.getPrice() != null && item.getQuantity() != null){
int resultPrice = item.getPrice() * item.getQuantity();
if(resultPrice < 10000){
errors.reject("totalPriceMin",new Object[]{10000,resultPrice},null);
}
}
}
target은 객체의 타입을 검증해준다.
Object타입이므로 해당 객체로 형변환을 해줘야한다.
Errors는 BindingResult의 자식 객체인데
속성값을 검증해준다