Hi~ Summers!!

java Annotation 본문

개발/JAVA

java Annotation

eNaNII 2014. 6. 25. 13:29

# NotNull.java

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotNull {

    public String message() default "";
}

Target에 Method라고 주면 Method에 적용하는 annotation이 된다.



# Form.java

public class Form {
   
    @NotNull(message="제목을 잘못 입력하셨습니다.")
    private String subject = "";

<생략>


# Validation.java

for(Field field : obj.getClass().getDeclaredFields()) {
    boolean check = false;
    if(trgFieldNames != null && trgFieldNames.length > 0) {
        for(String trgFieldName : trgFieldNames) {
            if( trgFieldName.equals(field.getName()) ) {
                check = true;
            }
        }
    } else {
        check = true;
    }
   
    if(check) {
        // 일단 Not null만 체크한다.
        if(field.isAnnotationPresent(NotNull.class)) {
            valChkResult = checkNotNull(field, obj);
           
            // 결과가 false이면 바로 리턴
            if(!valChkResult.isResult()) {
                return valChkResult;
            }
           
        }
    }
}



private static ValidationResult checkNotNull(Field field, Object obj) throws Exception {
    ValidationResult valChkResult = new ValidationResult();
   
    try {
        for(Annotation anno : field.getAnnotations() ) {
            String fieldName = field.getName();
            String methodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
            Method srcMethod = obj.getClass().getDeclaredMethod(methodName, null);
           
            String fieldValue = StringUtil.bvl(srcMethod.invoke(obj, null));
           
            if( !StringUtil.isNotNull(fieldValue) ) {
                NotNull annObj = field.getAnnotation(NotNull.class);
                String resultMsg = StringUtil.bvl(annObj.message());
               
                if(resultMsg.equals("")) {
                    resultMsg = "fail";
                }
               
                valChkResult.setResult(false);
                valChkResult.setMessage(resultMsg);
                valChkResult.setFieldName(fieldName);
                valChkResult.setFieldValue(fieldValue);
            }
        }
    } catch(Exception ex) {
        ex.printStackTrace();
        throw ex;
    }
   
    return valChkResult;
}


<참고>

http://blog.daum.net/oraclejava/15870128

http://blog.naver.com/jdi9526/130162780013

http://blog.naver.com/jdi9526/130162916506


Comments