spring_5일차_Validate

youuu·2022년 10월 21일
0

SPRING

목록 보기
5/33

@Valid @Validated
빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션

🙄
@Null (null일 겨우만 통과 가능) 이나 @Valid (대상 객체의 확인 조건을 만족할 경우 통과 가능) 을 써서 유효성 검사를 하는게 낫지 않을까... 알려주시지 않아 찾아보았다

  • @Null 값이 없는 @Empty@Blank 공백

Legacy로 och07_MVC05만들기

💼 och07_MVC05

📂 com.oracle.mvc05

👨‍🏫💬
Validate : 코드가 지저분 복잡하다.
사용자를 위한 코드. 모르면 java script를 써라.


📋 Student.java

package com.oracle.mvc05.dto;

public class Student {
	private String name;
	private String strId;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStrId() {
		return strId;
	}
	public void setStrId(String strId) {
		this.strId = strId;
	}
}


📋 StudentValidator.java

자바 스크립트에서 했던 검증과 비슷하다

package com.oracle.mvc05;

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

import com.oracle.mvc05.dto.Student;

//							Validator : 인터페이스. 시키는데로 할수 밖에 없다?
public class StudentValidator implements Validator {

	// 검증할 객체의 클래스 타입정보
	@Override
	public boolean supports(Class<?> student) {
		return Student.class.isAssignableFrom(student);
	}

	// validate 함수
	@Override
	public void validate(Object target, Errors errors) {
		System.out.println("StudentValidator validate() Start .....");
		Student student = (Student) target;
		String studentName = student.getName();
		if(studentName == null || studentName.trim().isEmpty()) {
			System.out.println("studentName is null or empty");
			System.out.println("validate ===> 회원 이름을 입력하세요.");
			// Errors errors : 에러가 난 이유를 담는다.
			errors.rejectValue("name", "회원 이름 공백 또는 NULL 오류");
		}
		
		String studentId = student.getStrId();
		if(studentId == null || studentId.trim().isEmpty()) {
			System.out.println("studentId is null or empty");
			System.out.println("validate ===> studentId를 입력하세요.");
			errors.rejectValue("strId", "strId 공백 또는 NULL 오류");
		}
	}
}



📍📋 StudentController.java

호출하는 쪽 : BindingResult 를 사용
StudentValidator 에선 : errors (같은객체)

package com.oracle.mvc05;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;

import com.oracle.mvc05.dto.Student;

@Controller
public class StudentController {
	private static final Logger logger = LoggerFactory.getLogger(StudentController.class);
	
	@RequestMapping("/studentForm")
	public String studentForm() {
		logger.info("studentForm Start ...");
		return "studentForm";
	}
	
	@RequestMapping("/student/create")
	public String studentCreate(Student student, BindingResult result, Model model) {
		String page = "studentDonePage";
		logger.info("studentCreate Start ...");
		StudentValidator validator = new StudentValidator();
		//	호출하는 쪽 : BindingResult	 StudentValidator 에선 : errors  (같은객체)
		validator.validate(student, result);
		logger.info("result Message --> {}", result.toString());
		System.out.println("result Message getFieldError --> " + result.getFieldErrorCount("name"));
		String name = "";
		String id = "";
		
		if(result.hasErrors()) {
			if(result.hasFieldErrors("name")) {
				System.out.println("result.hasErrors1 --> " + result.getFieldErrorCount("name"));
				FieldError fieldError1 = result.getFieldError("name");
				name = fieldError1.getCode();
				
				model.addAttribute("nameErr", name);
			}
		}
		
		if(result.hasErrors()) {
			if(result.hasFieldErrors("id")) {
				System.out.println("result.hasErrors2 --> " + result.getFieldErrorCount("strId"));
				FieldError fieldError2 = result.getFieldError("strId");
				id = fieldError2.getCode();
				
				model.addAttribute("idErr", id);
			}
		}
		
		return page;
	}
}

💻 결과화면 :






💻📋 studentForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String context = request.getContextPath();
	%>
	context : <%=context%> <p></p>
	
	<c:if test="${nameErr != ''}">
		${nameErr}
	</c:if>
	<c:if test="${idErr != ''}">
		${idErr}
	</c:if>
	
	<form action="<%=context%>/student/create">
		이름 : <input type="text" name="name"> <br/>
		아이디 : <input type="text" name="strId"><br/>
		<input type="submit" value="전송">
	</form>
</body>
</html>
profile
공부중인 주니어 개발자

0개의 댓글