티스토리 뷰
- 보통 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 |
'Spring' 카테고리의 다른 글
[Spring] Cannot load JDBC driver class 'com.mysql.jdbc.Driver / tomcat 404 error(spring - No mapping found for HTTP request with URI)해결하기 (0) | 2018.03.13 |
---|---|
[Spring] MVC - 게시판 만들기 2(게시판 기본 설계) (0) | 2018.03.12 |
[Spring] RequestMapping Parameter (0) | 2018.03.05 |
[Spring] Form Data (0) | 2018.03.05 |
[Spring] Controller and Mapping (0) | 2018.03.05 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 감자개발자
- Android
- 머신러닝
- TensorFlow
- node
- node.js
- 감자코딩
- 리버싱
- Controller
- C언어
- 초보자를 위한 C언어 300제
- 개발하는 관광이
- programming
- 노드
- MVC
- 복습
- BFS
- 코드엔진
- 스프링
- 텐서플로우
- 알고리즘
- C langauge
- 학교
- 안드로이드
- Spring
- 백준알고리즘
- Algorigm
- 프로그래밍
- 백준
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함