当前位置:网站首页>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
边栏推荐
猜你喜欢
Interpretation of Flink source code (III): Interpretation of executiongraph source code
Koa Middleware
Programmer orientation problem solving methodology
Some feelings of brushing leetcode 300+ questions
Idea resolving jar package conflicts
JVM 垃圾回收器之Serial SerialOld ParNew
redux使用说明
肖申克的救赎有感
服务器端渲染(SSR)和客户端渲染(CSR)的区别
Take you hand-in-hand to do intensive learning experiments -- knock the level in detail
随机推荐
Flink 解析(四):恢复机制
GCC error: terminate called after throwing an instance of 'std:: regex_ error‘ what(): regex
The difference between URI and URL
肖申克的救赎有感
冯诺依曼体系结构
汇编语言基础知识
The daemon thread starts redis and modifies the configuration file
Flink 解析(三):内存管理
DOS function call
搭建flutter环境入坑集合
数据传送指令
Yum install XXX reports an error
8086 memory
Brush questions during summer vacation, ouch ouch
Mongodb在node中的使用
CTF逆向入门题——掷骰子
Description of project structure configuration of idea
唯有学C不负众望 TOP1环境配置
MySQL数字函数
字节跳动海外技术团队再夺冠:高清视频编码已获17项第一