본문 바로가기

백/spring

Spring Validator를 이용한 검증

회원가입할때 많이 씀.

값을 받아와서,

커맨드 객체는 dto.class 

컨트롤러단의 validator 객체로 검증 실시 후

view단 => 클라이언트

공통기능을 하는 클래스를 하나 만들어서(StudentValidator), 값 체크하는 메소드를 넣어줌

ValidationUtils 클래스

오류 있으면 각 오류에 맞는 메시지를 보여준다.

@Valid와 @InitBinder

 

@Valid 오류 발생시

실습

그대로 전송

이거대신

  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id","trouble");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pw","trouble");

이게 더 간편

로그보면잘나옴

소스코드

package com.lgy.spring_validation_second;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Student {
    private String id;
    private String pw;
}
package com.lgy.spring_validation_second;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@Slf4j
public class StudentController {
    @RequestMapping("/studentForm")
    public String studentForm(){
        return "createPage";
    }
//    Student : 커맨드 객체(dto로 주로 사용)
//    BindingResult : 스프링에서 제공하는 기본 validation
    @RequestMapping("/student/create")
    public String studentCreate(Student student, BindingResult result){
        String page ="createDonePage";

//        StudentValidator : 공통기능 validation 체크하는 클래스 객체
        StudentValidator validator = new StudentValidator();
        validator.validate(student, result);

//        errors.rejectValue 메소드가 호출되면 result.hasErrors() 가 참
        if (result.hasErrors()){
            log.info("@# result.hasErrors() id=>"+result.getFieldError("id"));
            log.info("@# result.hasErrors() pw=>"+result.getFieldError("pw"));
            page = "createPage";
        }
        return page;
    }

}
package com.lgy.spring_validation_second;

import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;


//Validator: 스프링에서 제공하는 기본 validation 인터페이스
@Slf4j
public class StudentValidator implements Validator {

//    supports : 커맨드 객체 지정(dto 해당)
//    <?> : 제네릭 타입파라미터를 어떤것이라도 받아줌(ex> String , integer)
    @Override
    public boolean supports(Class<?> clazz) {
//        커맨드 객체를 clazz 매개변수로 부터 배치됨(validation 체크 대상이 됨)
        return Student.class.isAssignableFrom(clazz);
    }

//    target : validation 체크 대상인 커맨드 객체
//    errors :결과값 받는 객체
    @Override
    public void validate(Object target, Errors errors) {
        log.info("@# validate()");

        Student student = (Student) target; //다운캐스팅

        /*
        String id = student.getId();
        if(id == "" || id.trim().isEmpty()){
            log.info("@# id is null or empty");
//            결과값 객체에 id가 문제생겼다고 리턴
            errors.rejectValue("id","trouble");

        }

        String pw = student.getPw();
        if(pw == "" || id.trim().isEmpty()){
            log.info("@# pw is null or empty");
//            결과값 객체에 id가 문제생겼다고 리턴
            errors.rejectValue("pw","trouble");

        }
         */
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id","trouble");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pw","trouble");
    }
}
<%--
  Created by IntelliJ IDEA.
  User: GGG
  Date: 2023-06-22
  Time: 오후 12:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    createDonePage.jsp 입니다.
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: GGG
  Date: 2023-06-22
  Time: 오후 12:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   createPage.jsp입니다.
    <form action="student/create">
      아이디 : <input type="text" name="id"><br>
      비밀번호 : <input type="password" name="pw"><br>
      <input type="submit" value="전송">
    </form>
</body>
</html>

validation 3rd/////////////////////////////////

@Valid 어노테이션을 걸어서 initBinder사용

 

 

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>4.2.0.Final</version>
		</dependency>

@Valid 를 사용하기 위한 디펜던시 추가

 

//    @Valid Student 객체를 받아서 유효성 체크
    @InitBinder
    public void initBinder(WebDataBinder binder){
//        Student 객체를 binder로 받아서 StudentController 객체를 사용해서 유효성체크
        binder.setValidator(new StudentValidator());
    }

그대로찍힘

 

' > spring' 카테고리의 다른 글

스프링 기본파싱전략과 json통신  (0) 2023.07.30
스프링 시큐리티 2- ng처리  (0) 2023.07.12
스프링 시큐리티 1  (0) 2023.07.11
파일 업로드 부터 수정까지  (0) 2023.06.28
트랜잭션이란!??!?!!?!??!  (0) 2023.06.22