티스토리 뷰

Spring

[Spring] Form data value validation

감자형 2018. 3. 5. 16:36


- 보통 id,pw값들을 검증할때에는 Client쪽에서 JS,JQuery를 사용해서 비밀번호 유효개수,공백,특수문자 등 기본 처리를 해주는데, 여기서 살펴볼것들은 Validator를 이용하여 Server쪽에서 넘어온 데이터값들을 검증해볼것이다.


1. Validator(interface)를 이용한 검증

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
폼에서 전달되는 데이터들을 커멘드 객체에 담아 컨트롤 객체에 전달한다.
 
이때, 커멘드 객체의 유효성을 검증 할 수 있음.
 
JS = Client , Validator = Server
 
* 순서 *
 
클라이언트(form) -> Command Object -> Controller(Validator Object 검증실시) -> 검증 결과 -> 뷰
 
검증실시에서 조건이 맞지않을경우 ->Back Conduct
 
- BindingResult로 검증결과를 반환시키기 위한 클래스 파라미터를 가져온다. 검증되지 않았을 경우 처음의 페이지로 다시 돌아가게 한다.
 
예제로 살펴보기)
 
// 최초로 요청되는 부분 
 
@RequestMapping("/studentForm");
 
public String studentForm(){
 
return "createPage";
 
}
 
createPage.jsp 에서 /student/create를 요청하면서 밑에 코드 실행
 
@RequestMapping("/student/create")
 
public String studentCreate(@ModelAttribute("student") Student student,BindingReuslt result){
 
String page ="CreateDonePage";
 
// 유효성 검증 하는부분 
 
StudentValidator validator = new StudentValidator();
 
validator.validate(student,result);
 
// 에러가 있을 경우에 
 
if(result.hasErrors()){
 
page = "createpage";
 
}
 
return page;
 
}
 
여기서 StudentValidator클래스는 우리가 직접 만든 클래스 인데, 여기서 이 클래스는 Validator 인터페이스를 implements하고 있다. ( supports 검증할 클래스 타입 정보 , validate 인터페이스 메소드 )
 
<StudentValidator Class>
 
public class StudentValidator implements Validator{
 
@Override
 
public boolean support(Class <?> arg0){
 
return Student.class.AssignableForm(arg0);
 
}
 
// Object타입의 파라미터와 에러처리 파라미터 
 
// 여기서 왜 Object타입의 파라미터를 가져올까? 라는생각이들텐데, Object타입은 모든 object의 부모이므로 어떤타입이 들어올지모르기 때문에 최상위 부모인 Object타입으로 선언한 파라미터를 가져오게 게 된다.
 
@Override
 
public validate(Object obj,Errors errors){
 
System.out.println("validate()");
 
Student student =(Student)obj;
 
String StudentName = student.getName();
 
// Null이거나 비어있거나 
 
if(studentName == null || studentName.trim().isEmpty()){
 
System.out.println("studentName is null or empty");
 
error.rejectValue("name","trouble");
 
//문제 있음을 처리해준다
 
}
 
int studentId = student.getId();
 
if(studentId == 0){
 
System.out.println("studentid is 0 ");
 
error.rejectValue("name","trouble");
 
// 문제있음을 처리해준다
 
}
 
}
 
createPage.JSP 파일 내용
 
<form action ="/student/create">
 
이름<input type="text" name="name" value="${student.name}">
 
아이디<input type="text" name="id" value="${student.id}">
 
<input type="submit" value="전송">
 
</form>
 
결국,Validate클래스를 꼭 만들어 주어야 유효성 검사가 가능하다
 
String conPath = request.getContextPath();
 
//강의중에 ContextPath가 나오는데 이것은 com.java. Path
 
저 Path값을 가져오는것이다. Server에 자동으로 지정되므로 있어도되고 없어도 된다!
cs

2. ValidationUtils Class

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
이것을 사용하는 이유는 Validate메소드를 좀더 편리하게 사용하기위함이다.
 
@Override
 
public validate(Object obj,Errors errors){
 
System.out.println("validate()");
 
Student student =(Student)obj;
 
String StudentName = student.getName();
 
// ValidationUtils Class Using
 
ValidationUtils.rejectIfEmptyOrWhitespace(error,"name","trouble");
 
int studentId = student.getId();
 
if(studentId == 0){
 
System.out.println("studentid is 0 ");
 
error.rejectValue("name","trouble");
 
}
 
}
cs

3. @Valid와 @InitBinder

방금전 까지는 데이터를 검증하기 위해서 Validator 인터페이스를 구현한 클래스를 만들고 validate()메소드를 직접 호출하여 사용하였는데, 이번에는 직접호출하지 않고 스프링프레임워크 자체에서 호출을 해볼 것이다.


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@RequestMapping("/student/create")
 
public String studentCreate(@ModelAttribute("student") @Valid Student student,BindingReuslt result){
 
// Valid 어노테이션을 추가해준다
 
String page ="CreateDonePage";
 
// 에러가 있을 경우에 
 
if(result.hasErrors()){
 
page = "createpage";
 
}
 
return page;
 
}
 
+(추가) 아까 실습해보았던 예제에서 추가 내용 @InitBinder
 
@InitBinder
 
protected void initBinder(WebDataBinder binder){ 
 
binder.setValidator(new StudentValidator);
 
// 여기에서 스프링프레임워크에서 StudentValidator을 검증을 해주게 된다.
 
}
 
+(추가) 의존 추가 dependency(pom.xml)
 
<dependency>
 
<groupId> org.hibernate </groupId>
 
<artifactId> hibernate-validator </artifactId>
 
<version> 4.2.0.Final</version>
 
</dependency>
 
* 이렇게하면 스프링프레임워크에서 자동으로 호출을 하게 된다
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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 30 31
글 보관함