@Valid
@Validated
빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션
🙄
@Null
(null일 겨우만 통과 가능) 이나@Valid
(대상 객체의 확인 조건을 만족할 경우 통과 가능) 을 써서 유효성 검사를 하는게 낫지 않을까... 알려주시지 않아 찾아보았다
@Null
값이 없는@Empty
빈@Blank
공백
Legacy로 och07_MVC05
만들기
👨🏫💬
Validate : 코드가 지저분 복잡하다.
사용자를 위한 코드. 모르면 java script를 써라.
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;
}
}
자바 스크립트에서 했던 검증과 비슷하다
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 오류");
}
}
}
✔
호출하는 쪽 : 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;
}
}
<%@ 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>