Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Kim Hyeong

유효성 검사 본문

Spring

유효성 검사

김형완 2018. 8. 21. 10:47


[유효성 검사]


  # Validator : org.sprinframework.validation.Validator 인터페이스


   . 구현 메소드

    - boolean supports(Class<?> arg0) : Validator가 해당 클래스에 대한 값 검증을 지원하는

      지의 여부를 리턴한다.

    - void validate(Object target, Errors errors) :  target객체에 대한 검증을 실행하는 메소드

        검증결과에 문제가 있을 경우에는 errors 객체에 에러 정보를 저장

        

         

  ## 커멘드 객체에 검증 코드 추가 방법

  

    . @RequestMapping 어노테이션 메서드에서 커멘드 객체 다음 파라미터로 BindingResult 타입이나 Errors타입의 파라미터를

         추가한다.       

   

    . @RequestMapping 어노테이션 메서드내에서 Validator 객체를 생성 후  validate() 메서드 호출한다.  

         이때 커멘드 객체와 BindingResult 또는 Errors 타입의 파라미터를 전달 한다.   

         

    . Errors.hasErrors() 메서드를 이용하면 에러가 있는 지 여부를 확인 할 수 있다. 에러가 있는 경우 true, 없는 경우 false 리턴

    

    

   ## ValidationUtils 클래스 

     :validate()메소드를 좀 더 편리하게 사용할 수 있도록 한 클래스 이다.

     

     //validate() 메소드내에서 처리하는 코드

     

     String memName = member.getName();     

if(memName == null || memName.trim().isEmpty()){

System.out.println("회원 이름을 입력하세요..");

errors.rejectValue("name","입력시 오류 발생");

}//if()

     

    -----> ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "입력시 오류 발생"); 

     

   ## @Valid와 @InitBinder

     : validate()를 직접 호출하지 않고 스프링 프레임 워크에서 호출하는 방법

     

     pom.xml에서 라이브러리를 추가 시켜야 한다.(의존 추가)

          

     <dependency>

      <groupId>org.hibernate</groupId>

      <artifactId>hibernate-validator</artifactId>

      <version>4.2.0.Final</version>

     </dependency>

     

     

     @Valid을 아래와 같이 추가한다.

     

     public String inputOk(@ModelAttribute("member") Member member, BindingResult result)

     

     ----------->

     

     public String inputOk(@ModelAttribute("member") @Valid Member member, BindingResult result)

     

     @InitBind 추가 한다.

     

     

     @InitBind

     protected void initBinder(WebDataBinder binder){

      binder.setValidator(new MemberValidator());

     }

     

     [Errors 인터페이스와 BindingResult 인터페이스]

     

     Errors : org.springFramework.validation.Errors : 유효성 검증 결과를 저장할 때 사용

     BindingResult : org.springFramework.validation.BindingResult : Errors의 하위 인터페이스로서

      폼 값을 커멘드 객체에 바인딩한 결과를 저장하고 에러코드로 부터 에러 메시지를 가져온다.

     

     # Errors 인터페이스가 제공하는 메소드(반환 타입 void)

     .reject(String errorCode) : 전 객체에 대한 글로벌 에러 코드를 추가

     

     .reject(String errorCode, String defaultMessage) : 전 객체에 대한 글로벌 에러코드를 추가하고, 에러코드에 대한

      메시지가 존재하지 않을 경우 defaultMessage를 사용

     

     .reject(String errorCode, Object[] errorArgs, String defaultMessage) : 전 객체에 대한 글로벌 에러코드를

      추가, 메시지 인자로 errorArgs를 전달, 에러코드에 대한 메시지가 존재하지 않을 경우에는 defaultMessage를 사용

         

     .rejectValue(String field, String errorCode) : 필드에 대한 에러코드를 추가

     .rejectValue(String field, String errorCode, String defaultMessage) : 필드에 대한 에러코드를 추가

에러코드에 대한 메시지가 존재하지 않을 경우 defaultMessage를 사용

     .rejectValue(String field, String errorCode, Ojbect[] errorArgs, String defaultMessage) : 필드에 대한 

      에러코드를 추가, 메시지 인자로 errorArgs를 전달, 에러코드에 대한 메시지가 존재하지 않을 경우 defaultMessage를 사용

     

      

      # Errors 인터페이스의 에러 발생 여부를 확인하기 위한 메소드

      

         . boolean hasErrors() : 에러가 존재하는 경우 true 리턴

         . int getErrorCount() : 에러 개수를 리턴

         . boolean hasGlobalErrors : reject() 메소드를 이용해서 추가된 글로벌 에러가 존재할 경우 true 리턴

         . int getGlobalErrorCount() : reject() 메소드를 이용해서 추가된 글로벌 에러 개수를 리턴

         . boolean hasFieldErrors() : rejectValue() 메소드를 이용해서 추가된 에러가 존재할 경우 true 리턴

         . int getFieldErrorCount() : rejectValue() 메소를 이용해서 추가된 에러 개수를 리턴

         . boolean hasFieldErrors(String field) : rejectValue() 메소드를 이용해서 추가한 특정 필드의 에러가 존재

          할 경우 true를 리턴

         . int getFieldErrorCount(String field) : rejectValue() 메소드를 이용해서 추가한 특정 필드의 

          에러 개수를 리턴

         

     

     

     

     

     

         

'Spring' 카테고리의 다른 글

Spring 트랜잭션  (0) 2018.08.21
Component  (0) 2018.08.21
스프링 DI(Dependency Injection) 2  (0) 2018.08.20
스프링 DI(Dependency Injection) 1  (0) 2018.08.20
스프링 MVC 흐름과 주요 구성 컴포넌트  (0) 2018.08.16
Comments