스프링4.1 Spring @Valid 파라미터검사 벨리데이션 적용하기
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폴더에 추가하면 된다.
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 처리를 하던지 해야한다.