java @Target 自定義註解 校驗引數是否為空
阿新 • • 發佈:2018-12-19
第一步自定義類 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 ParamsRequired { /** * 必須引數 * @return */ boolean requrie() default true; }
import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; import java.util.Date; public class BasePojo { public boolean validate() throws Exception { Field[] fields = this.getClass().getDeclaredFields(); for (Field field : fields) { if(field.isAnnotationPresent(ParamsRequired.class)) { ParamsRequired paramsRequired = field.getAnnotation(ParamsRequired.class); if(paramsRequired.requrie()) { // 如果型別是String if (field.getGenericType().toString().equals( "class java.lang.String")) { // 如果type是類型別,則前面包含"class ",後面跟類名 // 拿到該屬性的gettet方法 /** * 這裡需要說明一下:他是根據拼湊的字元來找你寫的getter方法的 * 在Boolean值的時候是isXXX(預設使用ide生成getter的都是isXXX) * 如果出現NoSuchMethod異常 就說明它找不到那個gettet方法 需要做個規範 */ Method m = this.getClass().getMethod( "get" + getMethodName(field.getName())); String val = (String) m.invoke(this);// 呼叫getter方法獲取屬性值 if(StringUtils.isEmpty(val)) { throw new Exception(field.getName() + " 不能為空!"); } else if (val != null) { System.out.println("String type:" + val); } } else if (field.getGenericType().toString().equals( "class java.lang.Integer")) { // 如果type是類型別,則前面包含"class ",後面跟類名 Method m = this.getClass().getMethod( "get" + getMethodName(field.getName())); Integer val = (Integer) m.invoke(this);// 呼叫getter方法獲取屬性值 if(val==null) { throw new Exception(field.getName() + " 不能為空!"); } else if (val != null) { System.out.println("Integer type:" + val); } }else if (field.getGenericType().toString().equals( "class java.util.Date")) { Method m = this.getClass().getMethod( "get" + getMethodName(field.getName())); Date val = (Date) m.invoke(this);// 呼叫getter方法獲取屬性值 if(val==null) { throw new Exception(field.getName() + " 不能為空!"); } else if (val != null) { System.out.println("Date type:" + val); } }else if (field.getGenericType().toString().equals( "class java.math.BigDecimal")) { Method m = this.getClass().getMethod( "get" + getMethodName(field.getName())); BigDecimal val = (BigDecimal) m.invoke(this);// 呼叫getter方法獲取屬性值 if(val==null) { throw new Exception(field.getName() + " 不能為空!"); } else if (val != null) { System.out.println("BigDecimal type:" + val); } }else if (field.getGenericType().toString().equals( "class java.lang.Double")) { Method m = this.getClass().getMethod( "get" + getMethodName(field.getName())); Double val = (Double) m.invoke(this);// 呼叫getter方法獲取屬性值 if(val==null) { throw new Exception(field.getName() + " 不能為空!"); } else if (val != null) { System.out.println("double type:" + val); } }else if (field.getGenericType().toString().equals( "class java.lang.Float")) { Method m = this.getClass().getMethod( "get" + getMethodName(field.getName())); Float val = (Float) m.invoke(this);// 呼叫getter方法獲取屬性值 if(val==null) { throw new Exception(field.getName() + " 不能為空!"); } else if (val != null) { System.out.println("float type:" + val); } } } } } return true; } /** * 把一個字串的第一個字母大寫、效率是最高的、 */ private String getMethodName(String fildeName) throws Exception{ byte[] items = fildeName.getBytes(); items[0] = (byte) ((char) items[0] - 'a' + 'A'); return new String(items); } }
import java.math.BigDecimal; import java.util.Date; public class Text extends BasePojo { @ParamsRequired private String name; @ParamsRequired private Integer age; @ParamsRequired private Date createTime; @ParamsRequired private Double adouble; @ParamsRequired private Float afloat; @ParamsRequired private BigDecimal decimal; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Double getAdouble() { return adouble; } public void setAdouble(Double adouble) { this.adouble = adouble; } public Float getAfloat() { return afloat; } public void setAfloat(Float afloat) { this.afloat = afloat; } public BigDecimal getDecimal() { return decimal; } public void setDecimal(BigDecimal decimal) { this.decimal = decimal; } }
public static void main(String[] args){
Text req = new Text(); req.setName("張三"); req.setAge(1); req.setDecimal(new BigDecimal(12212)); req.setCreateTime(new Date());
}