본문 바로가기

spring

<Spring>Validator 인터페이스 사용

-스프링에서 Validator 인터페이스 지원

-애플리케이션에서 사용하는 객체를 검증(유효성 검사)할 수 있는 기능

-어노테이션을 이용하여 객체가 제대로 생성되어 있는지  검증

 

 

Validator  인터페이스 구현 시

 

supports :  유효성 검사를 할 데이터를 가지고 있는 객체가 유효성 검사가 가능 체크

 

validate : 유효성 검사를 하는 메서드

 

 


 

mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

Mosip Template Manager Using Velocity Template Engine Last Release on Oct 24, 2020

mvnrepository.com

검색후 해당 버전을 찾아 코딩을 클릭하면 자동 복사가 됩니다!!!

 

 

---=-------=-=-=-=-=일단 흠냐...  pom.xml 의존 추가해주자!!

 

<!--의존 추가 -->
		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>4.2.0.Final</version>
		</dependency>

 

주의 !!자바 버전이 안 맞는 분들!! 에러가

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException 이 에러 나오면

 

<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
		<!-- 프로젝트 의존성 내에 컴파일 추가해야한다. -->
		<dependency>
			<groupId>javax.xml.bind</groupId>
			<artifactId>jaxb-api</artifactId>
			<version>2.3.0</version>
		</dependency>

자바 9버전 이후부턴 기능이 빠져있습니다!!! 참고!!!

 

 

---------------------------------------------------------------------------------------------------------------------------

 

 

 

---Validator 인터페이스를 구현한 클래스

 

 

rejectIfEmpty(error객체, "프로퍼티" , "코드이름") : 값이 비어 있는지 확인, 공백도 체크!

 

rejectIfEmptyOrWhitespace(error객체,"프로퍼티" , "코드이름") : 값이 비어있거나 공백 구성되어있는지 체크!

 

error 객체에 오류 정보 저장

 

---주석처리되있는 아랫부분에 rejectValue("프로퍼티", "코드이름") > 유효성 조건을 직접 만들어 검사 시 사용

package com.javalec.ex2;

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

public class StudentValidator implements Validator{
	
	@Override
	public boolean supports(Class<?> arg0) {	//유효성 검사할 데이터를 가지고있는 객체가 유효성검사가가능한지확인
		return Student.class.isAssignableFrom(arg0);
	}

	@Override
	public void validate(Object obj, Errors errors) {// obj 를받은이유는 오버라이딩	//유효성검사를하는 메서드
		// TODO Auto-generated method stub
		
		System.out.println("validate");
		
		Student student = (Student)obj;
//		
//		String istudent = student.getName();
//		
//		if(istudent == null || istudent.trim().isEmpty()) {
//			System.out.println("studentName is null or empty");
//			errors.rejectValue("name", "trouble");
//		}
		
		//rejectlfempty  값이 비어있는지 확인.
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "trouble");
		//이렇게 줄일수있습니다. 값이 비어 있거나 공백으로만 구성 입력값에 문제가 있다면 error객체에 오류정보저장
		
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "trouble");
//		int studentId = student.getId();
//		
//		if(studentId == 0) {
//			System.out.println("id = 값");
//			errors.rejectValue("id", "trouble");
//		}
		
	}
	
}

 

---StudentTecController3

package com.mvc.test;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.javalec.ex2.Student;
import com.javalec.ex2.StudentValidator;

@Controller
public class StudentTecController3 { // com.javalec.ex2 Student

	@RequestMapping("/studentForm") // 데이터 클래스에 이름을 부여 student 로 쓰것다.
	public String studnetForm(HttpServletRequest req, Model model) {

		return "Create/createPage";
	}
	

	@RequestMapping("/student/create")
	public String create(@ModelAttribute("student") @Valid Student student, BindingResult result) {

		String page = "Create/createResult";		//상대경로

//		StudentValidator validator = new StudentValidator();	 @Valid 어노테이션 사용
//
//		validator.validate(student, result);

		if (result.hasErrors()) {
			page = "Create/createPage";		//상대경로
		}
			return page;
	
	}
	/*
	 * return
	 * "redirect:http://localhost:8091/MVCproject/studenttec2/studentURL1.jsp";
	 */
	@InitBinder		
	protected void initBinder(WebDataBinder binder) {
		binder.setValidator(new StudentValidator());  //addValidators 여러개일경우
	}												//validator1, validataor2 /.. .

}

 

 

 

--데이터 클래스

 

package com.javalec.ex2;

public class Student {		//controller 3
	
	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;
	}

	
	

}

 

 

--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>
<%
	String conPath = request.getContextPath();		// 프로젝트 path만 얻어온다. 앞에 상대 경로  . 과 같다
%>

<form action="<%=conPath %>/student/create">	
 이름 : <input type="text" name="name" value="${student.name}">
 아이디 : <input type="text" name="id" value="${student.id}"> 
 <input type="submit" value="버튼">
</form>
</body>
</html>

 

--createResult

<%@ 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>
<%
	String conPath = request.getContextPath();
%>

 name :${student.name}
 id : ${student.id}


</body>
</html>

 


 

 

-- 입력 값이  null 값일 경우

 

 

 

-- 값이 정상적으로 넘어가는 경우

 

정상적으로 매핑한 페이지로 이동한다.

'spring' 카테고리의 다른 글

<Spring > Spring AOP  (0) 2020.10.22