当前位置:网站首页>Case: check the empty field [annotation + reflection + custom exception]
Case: check the empty field [annotation + reflection + custom exception]
2022-07-06 17:18:00 【Xiaobai said (๑• ๑)】
Learning never stops !
A combination of annotations 、 Reflection 、 Small cases of custom exception knowledge —— Check for empty fields !
1、 Define a specification class : All fields that need to be checked need to be implemented
package com.dongzi;
/** * Define standardized interfaces */
public interface CheckRule {
}
2、 Define entity classes and implement standard interfaces : Add CheckField annotation , The first 3 Item with code
package com.dongzi;
/** * Simulate entity class */
public class Student implements CheckRule {
public Student() {
}
public Student(Integer id, Integer age, Integer sex, String name) {
this.id = id;
this.age = age;
this.sex = sex;
this.name = name;
}
private Integer id;
@CheckField(message = " Student age ")
private Integer age;
private Integer sex;
@CheckField(message = " The student's name ")
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3、 Define check field annotations
package com.dongzi;
import java.lang.annotation.*;
/** * Define the annotation of the check field * <pre> * @Retention: Specify the runtime * @Target: Specify the scope of the annotation * </pre> */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CheckField {
/** * Whether to open the field NULL Value check * @return true The default return check on field */
boolean value() default true;
/** * Field related description */
String message();
}
4、 Custom exception : Check that the field is NULL Throw when
package com.dongzi;
/** * Custom check exception */
public class CheckException extends Exception{
/** * There is no special implementation to directly call the parent class construction * @param msg Exception message */
public CheckException(String msg){
super(msg);
}
}
5、 Define the check field tool class : How to check fields
package com.dongzi;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
/** * Define exception checking tool classes */
public class CommentUtils {
/** * Check the empty field tool class * * @param checkRule Need to be checked bean */
public static void checkNonField(CheckRule checkRule) throws CheckException {
Class<? extends CheckRule> beanClass = checkRule.getClass();
Field[] fields = beanClass.getDeclaredFields();
if (fields.length > 0) {
for (Field field : fields) {
CheckField checkField = field.getAnnotation(CheckField.class);
if (checkField != null && checkField.value()) {
// field.setAccessible(true);
String fieldName = field.getName();
// TODO: No other tool classes have been introduced , temporarily replace
char[] chars = fieldName.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
fieldName = String.copyValueOf(chars);
String methodName = "get" + fieldName;
Object objVal;
try {
objVal = beanClass.getMethod(methodName).invoke(checkRule);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
// method invoke exception handling
}
if (objVal == null || "".equals(objVal)) {
throw new CheckException(checkField.message() + ": Is required ");
}
}
}
}
}
}
6、 Program starts
package com.dongzi;
public class Main {
public static void main(String[] args) {
// Student student_1 = new Student(1, 23, 1, " Outlaw maniac —— Zhang San "); // Output results :~~~ Field is not NULL
Student student_2 = new Student(1, null, 1, " Outlaw maniac —— Zhang San "); // Output results : Student age : Is required
try {
CommentUtils.checkNonField(student_2);
System.out.println("~~~ Field is not NULL");
} catch (CheckException e) {
e.printStackTrace();
}
}
}
7、 Two execution results
- Pass in student_1 object :
- Pass in student_2 object :
Throw an exception ,NULL Field check complete ! Can complete a Bean Check all non empty fields .
attach 1: Project structure
attach 2: About reflection execution efficiency
边栏推荐
猜你喜欢
Notes on how the network is connected
1. Introduction to JVM
复盘网鼎杯Re-Signal Writeup
ByteDance technical Interviewer: what kind of candidate do I want to pick most
原型链继承
MySQL string function
连接局域网MySql
Introduction to spring trick of ByteDance: senior students, senior students, senior students, and the author "brocade bag"
TCP的三次握手和四次挥手
服务器端渲染(SSR)和客户端渲染(CSR)的区别
随机推荐
MySQL optimization notes
Activit fragmented deadly pit
JVM类加载子系统
MySQL字符串函数
面试集锦库
一个数10年工作经验的微服务架构老师的简历
Eight part essay that everyone likes
【逆向】脱壳后修复IAT并关闭ASLR
案例:检查空字段【注解+反射+自定义异常】
Data transfer instruction
DS18B20數字溫度計系統設計
Typescript basic operations
学习投资大师的智慧
Flink 解析(四):恢复机制
SQL tuning notes
Flink源码解读(一):StreamGraph源码解读
The difference between URI and URL
唯有学C不负众望 TOP3 Demo练习
Brush questions during summer vacation, ouch ouch
Control transfer instruction