ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링4.1 Spring @Valid 파라미터검사 벨리데이션 적용하기
    Spring 2018. 1. 21. 20:43
    반응형

    Controller로 받는 VO나 파라미터의 대해 유효성 검사 하기.

     

    나의 스프링버전 4.1 (스프링 버전에 상관없이 다 되는 것 같다.)

     

    maven프로젝트면 dependency 추가하거나  

     

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->

    <dependency>

        <groupId>org.hibernate</groupId>

        <artifactId>hibernate-validator</artifactId>

        <version>4.3.2.Final</version>

    </dependency>

     

    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->

    <dependency>

        <groupId>javax.validation</groupId>

        <artifactId>validation-api</artifactId>

        <version>1.0.0.GA</version>

    </dependency>

     

    아닌 프로젝트는 아래의 jar를 다운받아 lib폴더에 추가하면 된다.

     

     

    hibernate-validator-4.3.2.Final.jar
    다운로드
    validation-api-1.0.0.GA.jar
    다운로드

     

    1.  서블릿을 설정하는 xml에(servlet-context.xml) 아래의 한줄을 추가한다. 

     

    <annotation-driven />      <!-- 컨트롤러로 넘어온 파라미터값이 자동으로 바인딩된다 -->

     

     

    2. MemberVO.java

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public class MemberVO implements Serializable{
        private static final long serialVersionUID = -4402732489319220520L;
        
        /*
         * @Valid 어노테이션을 이용해서 model의 값을 지정하는 경우 아래의 방식으로 통해서 데이터 유효성 검증을 진행 할 수 있습니다.
         * 
         * @AssertFalse : false 값만 통과 가능
         * @AssertTrue : true 값만 통과 가능
         * @DecimalMax(value=) : 지정된 값 이하의 실수만 통과 가능
         * @DecimalMin(value=) : 지정된 값 이상의 실수만 통과 가능
         * @Digits(integer=,fraction=) : 대상 수가 지정된 정수와 소수 자리수보다 적을 경우 통과 가능
         * @Future : 대상 날짜가 현재보다 미래일 경우만 통과 가능
         * @Past : 대상 날짜가 현재보다 과거일 경우만 통과 가능
         * @Max(value) : 지정된 값보다 아래일 경우만 통과 가능
         * @Min(value) : 지정된 값보다 이상일 경우만 통과 가능
         * @NotNull : null 값이 아닐 경우만 통과 가능
         * @Null : null일 겨우만 통과 가능
         * @Pattern(regex=, flag=) : 해당 정규식을 만족할 경우만 통과 가능
         * @Size(min=, max=) : 문자열 또는 배열이 지정된 값 사이일 경우 통과 가능
         * @Valid : 대상 객체의 확인 조건을 만족할 경우 통과 가능
         * */
        
        @Size(max=10, message="아이디는 10미만으로 작성해야 합니다.")
        private String memberId;
        
        @Size(max=10,message="이름은 10자미만으로 작성해야 합니다.")
        private String memberName;
        
    }
     

     

    3. Controller.java

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        @RequestMapping(value="/admin/memberRegProc.do", method=RequestMethod.POST)
        public ModelAndView setAdminMemberRegProc(
                HttpServletRequest httpServletRequest,
                @ModelAttribute("memberVo") @Valid MemberVO memberVo, BindingResult bindingResult ){
            
            if(bindingResult.hasErrors()){ // VO로 받은 데이터의 문제가 있을시
                FieldError fieldError = bindingResult.getFieldError();
                log.info(fieldError.getDefaultMessage()); //message를 출력한다.
            }
            
            return new ModelAndView("admin/memberList");
        }
     

    bindingResult의 순서는 파라미터 뒤에 정의한다.

     

     

    데이터에 문제가 있으면 VO에 정의한 설정되로 메시지가 출력된다.

     

    hasErros() 에러가 떨어져도 컨트롤러는 중지되지 않고 실행된다.

    위와 같은 에러가 떨어지면 따로 return 처리를 하던지 해야한다.

     

     

     

     

    반응형

    댓글

Designed by Tistory.