스프링 (validate) 유효성 검사

서울IT코드정리 /kyChoi·2021년 11월 14일
0

스프링

목록 보기
15/17
Validator 를 이용한 검증

폼에서 전달되는 데이터를 커맨드 객체에 담아 컨트롤 객체에 전달 한다고 하였습니다.
이때 커맨드 객체의 유효성 검사를 할 수 있습니다.
참고로 javascript를 이용하는 것은 클라이언트에서 검사하는 방법이고, 지금하는 validator 인터페이스를 이용하는 방법은 서버에 검사하는 방법입니다.

@RequestMapping("/studentForm")
public String studentForm(){
return "createPage" 
}
//url 에 /프로젝트명/studentForm 이 날라오면 createPage.jsp 로 날라갑니다

createPage.jsp

<%
	String conPath = request.getContextPath(); // /프로젝트명
%>
<form action="student/create">
	이름 : <input type="text" name="name" value="${student.name}">
	아이디 : <input type="text" name="id" value="${student.id}">
	<input type="submit" value="전송">

해당 input 박스에 submit 을 누르면 student/create 로 날라간다.

잠깐! 여태까지 dispatcheservlet 이 controller 에게 데이터를 보냈다고 배웠는데, 어노테이션 에선 

dispatcherServlet 이 없이, controller 에 annotation 에 걸려서 작동하네.

@RequestMapping("/student/create")
public String studentCreate(@ModelAttribute("student") Student student, BindingResult result){//커맨드객체 이름 변경
	String page = "createDonePage";
	
	StudentValidator validator = new StudentValidator();//Validator interface 를 상속, 내장클래스, 오버라이딩 필요 (boolean supports, void validate(Object obj, Errors errors))
	validator.validate(student, result);
	if(result.hasErrors()){
	page="createPage";
}
	return page;
}

StudentValidator 클래스에 validate 메소드에 student랑 result 를 넘겨준다


StudentValidator.java

public class StudentValidator implements validator{
	@Override
	public boolean supports(Class<?> arg0){
	return Student.class.isAssignableFrom(arg0);
}
	@Override
	public void validate(Object obj, Errors errors){
	System.out.println("validate()");
	Student student= (Student)obj;
	
	String studentName = student.getName();
	if(studentName == null || studentName.trim().isEmpty()){
	System.out.println("studentName is null or empty");
	errors.rejectValue("name","trouble");
}
	int studentId = student.getId();
	if(studentId == 0){
	System.out.println("studentId is 0");
	errors.rejectValue("id", "trouble");
	}
}
}

errors 는 result 이다, 자료형 Errors 를 가지고 있다, 해당 클래스에 rejectValue 를 가지고 있다 () 인자값으로 String field 랑 String errcode 를 가진다,

String field 에 필드값이 들어간다 -> ${member.id} 일때 id 가 필드이다.

errors.rejectValue("name")
errors.rejectValue("id") 라면  ${member.id} 와 ${member.name} 이된다. 

StudentController 에 if(result.hasErrors()) 로 가서 참이라면 createPage로 이동한다
profile
건물주가 되는 그날까지

0개의 댓글