아르꼬의 코딩일기

[스프링] Validator를 이용한 서버 유효성 검사 본문

Spring

[스프링] Validator를 이용한 서버 유효성 검사

아르꼬 2023. 2. 16. 10:33

일반적으로 유효성 검사는 프론트단에서 작업을 하는데 사실 서버랑 프론트에서 둘다 작업을 하는게 가장 좋다

그래서 서버단에서 작업을 하기위해서는 밸리데이터 클래스를 추가한다.

 

Student

package com.all.test01;

public class Student {
	private String name;
	private int id;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
}

 

StudentValidator

package com.all.test01;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

public class StudentValidator implements Validator {

	@Override
	public boolean supports(Class<?> clazz) {
		return Student.class.isAssignableFrom(clazz);
	}

	@Override
	public void validate(Object target, Errors errors) {
		System.out.println("validate()");
		Student student = (Student)target;
		
		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");
		}
	}
	
}

createPage

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
createPage.jsp
<br>

	<form action="student/create">
		이름 : <input type="text" name="name" value="${student.name}"><br>
		아이디 : <input type="text" name="id" value="${student.id}"><br>
		<input type="submit" value="전송"><br>
	</form>

</body>
</html>

 

createDonePage

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<body>
createDonePage.jsp<br>
이름 : ${student.name}<br>
아이디: ${student.id}
</body>
</html>

 

StudentController

package com.all.test01;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class StudentController {
	
	@RequestMapping("/studentForm")
	public String studentForm() {
		return "createPage";
	}
	
	@RequestMapping("/student/create")
	public String studentCreate(@ModelAttribute("student") Student student, 
			BindingResult result) {
		
		String page = "createDonePage";
		
		StudentValidator studentValidator = new StudentValidator();
		studentValidator.validate(student, result);
		if(result.hasErrors()) {
			//page = "createPage";
			page = "redirect:/studentForm";
		}
		
		return page;
	}
}

 

결과

 

아이디에 문자 입력시 아래와 같이 페이지 redirect 코드 때문에 다시 돌아온다.