Spring

스프링4.1 Spring @Valid 파라미터검사 벨리데이션 적용하기

dev.mk 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 처리를 하던지 해야한다.

 

 

 

 

반응형