2-31 데이터의 변환과 검증(2)

서현우·2022년 5월 16일
0

스프링의정석

목록 보기
31/85

추가 해야 할 내용 있음!!

Validator

객체를 검증하기 위한 인터페이스. 객체 검증기(validator)구현에 사용

public interface Validator {
	//이 검증기로 검증가능한 객체인지 알려주는 메서드
	boolean supports(Class<?> clazz);
	//객체를 검증하는 메서드 - target: 검증할 객체, errors:검증시 발생한 에러저장소
	void validate(Object target, Errors errors);
}

Validator를 이용한 검증 - 수동

컨트롤러 메서드 -> 검증이란 관심사로 분리

컨트롤러 메서드

@PostMapping("/register/add")
public String save(Model model, User user, BindingResult result) {
	String msg="";
	String id = user.getId();
	if(id==null || "".equals(id.trim())) {
		model.addAttribute("msg", "id는 필수 입력항목입니다.");
		return "redirect:/register/add";
	}
	if(id==null||id.length()<5||id.length()>12)}
		model.addAttribute("msg", "id의 길이는 5글자이상 12글자 미만입니다.");
		return "redirect:/register/add";
	}

==> 수동검증(분리)

UserValidator userValidator = new UserValidator();
userValidator.validate(user, result); //validator로 검증
if(result.hasErrors()) { //에러가 있으면
	return "registerForm";
}

Validator를 이용한 검증 - 자동

@Valid

글로벌 Validator

하나의 Validator로 여러 객체를 검증할 때, 글로벌 Validator로 등록
글로벌 Validator로 등록하는 방법
servlet-context.xml

<annotation-driven validator="globalValidator"/>
<beans:bean id="globalValidator" class="com.fastcampus.ch2.GlobalValidator"/>

글로벌 Validator와 로컬 Validator를 동시에 적용하는 방법

@InitBinder
public void toDate(WebDataBinder binder) {
	SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
	binder.registerCustomEditor(Date.class, new CustomDateEditor(df, false));
	
	binder.addValidators(new UserValidator()); //validator를 WebDataBinder에 등록

MessageSource

다양한 리소스에서 메세지를 읽기 위한 인터페이스
파일, 배열 ...

프로퍼티 파일을 메세지 소스로 하는 ResourceBundleMessageSource를 등록
servlet-context.xml

검증 메세지으 ㅣ출력

스프링이 제공하는 커스텀 태그 라이브러리를 사용

<form>대신 <form:form>사용

profile
안녕하세요!!

0개의 댓글