자바 사용자 정의 주석 이 앞 배경 매개 변수 검 사 를 실현 하 는 인 스 턴 스

사실은@Constraint 를 통 해 사용자 정의 주 해 를 제한 할 수 있 는 방법 입 니 다.
@Constraint(validatedBy = xxxx.class)
다음은 제 가 만 든 자바 사용자 정의 주석 이 앞 배경 매개 변수 검 사 를 실현 하 는 코드 예제 입 니 다.
이것 에 관심 이 있 는 사람 은 잘 보고 잘 배 워 보 세 요.

package sonn.sonnannotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;

import sonn.util.StringUtill;

/**
* @ClassName: IsValidString 
* @Description:               ,          
* @author   
* @date 2016-7-25   8:22:58 
* @version 1.0
 */
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IsValidString.ValidStringChecker.class)
@Documented
public @interface IsValidString 
{
  String message() default "The string is invalid.";
  
  Class<?>[] groups() default {};
  
  Class<? extends Payload>[] payload() default{};
  
  class ValidStringChecker implements ConstraintValidator<IsValidString,String>
  {

    @Override
    public void initialize(IsValidString arg0)
    {  
    }

    @Override
    public boolean isValid(String strValue, ConstraintValidatorContext context)
    {
      if(StringUtill.isStringEmpty(strValue))
      {
        return true;
      }
      if(strValue.contains("<"))
      {
        return false;
      }
      return true;
    }
    
  }
}
상기 코드 는@Constraint(vaidatedBy=IsValidString.ValidStringChecker.class)를 통 해 주해 의 방법 논 리 를 제한 합 니 다.이 주해 류 의 이름 은 ValidStringChecker 의 내부 클래스 입 니 다.
이 내부 클래스 는 ConstraintValidator인 터 페 이 스 를 실현 합 니 다.
공식 문 서 는 이렇게 설명 합 니 다.
javax.validation
Interface ConstraintValidator•------------------------------------------------public interface ConstraintValidatorDefines the logic to validate a given constraint A for a given object type T. Implementations must comply to the following restriction:•T must resolve to a non parameterized type•or generic parameters of T must be unbounded wildcard typesThe annotation SupportedValidationTarget can be put on a ConstraintValidator implementation to mark it as supporting cross-parameter constraints. Check out SupportedValidationTarget and Constraint for more information.실 현 된 isValid 방법 은 바로 이 인터페이스의 검사 방법 입 니 다.효 과 를 시험 해 보고 검사 할 실체 필드 에 주 해 를 추가 합 니 다. 글 페이지 를 작성 하고 글 제목 에'<'를 추가 한 다음 제출 합 니 다. 제출 실패,500 오 류 를 보고,설명 주해 가 유효 합 니 다: 하지만 문제 가 있 습 니 다.제 블 로그 사 이 트 는 오류 메 시 지 를 직접 출력 할 수 없습니다.error 페이지 를 만들어 야 합 니까?이것 은 간단 합 니 다.웹.xml 에 error 페이지 경 로 를 추가 한 다음 페이지 를 만 들 면 됩 니 다. 500 /error.jsp 먼저 기본 개념 을 소개 한다.1.자바 는@interface xx{}로 주 해 를 정의 합 니 다.이 물건 을 주석 하 는 것 은 사실 신비 하지 않 습 니 다.표시 일 뿐 입 니 다.프로그램 이 표시 처 에 실행 되면 해당 하 는 논 리 를 수행 할 뿐 입 니 다.주해 자체 가 하나의 유형 이다.2.주 해 는 정의 할 때 일부 주 해 를 표시 하면 특정한 의 미 를 나 타 낼 수 있다.@Retention(Retention Policy.SOURCE)//주 해 는 원본 코드 에 만 존재 하 며,class 바이트 파일 에는 포함 되 지 않 습 니 다.@Retention(RetentionPolicy.CLASS)//기본 보존 정책 입 니 다.주 해 는 class 바이트 파일 에 존재 하지만 실행 중 얻 을 수 없습니다.@Retention(Retention Policy.RUNTIME)//주 해 는 class 바이트 파일 에 존재 하 며,실행 중 반사 로 가 져 올 수 있 습 니 다.(RUNTIME 은 반사 적 으로 얻 을 수 있 음 을 의미 하기 때문에 주의해 야 한다)@Target(ElementType.TYPE)//인터페이스,클래스,매 거 진,주석@Target(ElementType.FIELD)//필드,매 거 진 상수@Target(ElementType.METHOD)//방법@Target(ElementType.PARAMETER)//방법 매개 변수@Target(ElementType.CONSTRUCTOR)//구조 함수@Target(ElementType.LOCAL_VARIABLE)//부분 변수@Target(ElementType.ANNOTATION_TYPE)//주석@Target(ElementType.PACKAGE)//패키지주 해 를 정의 할 때@Taget(xx)과@Retention(Retention Policy.RUNTIME)을 추가 하 는 방법 이 있 습 니 다.그러나 주해 에 방법 을 쓰 지 않 고 실행 할 때 반사 체 제 를 통 해 주 해 를 얻 은 다음 에 스스로 해당 하 는 논리(주해 해석 기)를 쓰 는 방법 이 있 습 니 다.대개 비슷 한 문법 입 니 다. import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Inherited @Target({ ElementType.FIELD, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) public @interface Validate { public int min() default 1; public int max() default 10; public boolean isNotNull() default true; }이후 운행 시 반사 로 주 해 를 얻 고 구체 적 으로 는 말 하지 않 는 다.예전 에 인터넷 에서 이 분야 의 기술 문장 을 찾 은 것 은 모두 이런 것 이 었 고 그 당시 의 저 에 게 큰 곤 혹 스 러 움 을 주 었 습 니 다.내 가 원 하 는 게 아 닌 것 같 아서.이상 의 자바 사용자 정의 주석 이 앞 배경 매개 변수 검 사 를 실현 하 는 인 스 턴 스 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기