-스프링에서 Validator 인터페이스 지원
-애플리케이션에서 사용하는 객체를 검증(유효성 검사)할 수 있는 기능
-어노테이션을 이용하여 객체가 제대로 생성되어 있는지 검증
Validator 인터페이스 구현 시
supports : 유효성 검사를 할 데이터를 가지고 있는 객체가 유효성 검사가 가능 체크
validate : 유효성 검사를 하는 메서드
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 |
---|