在开发过程中遇到的需求是当前端调用修改接口的时候,我需要知道他具体修改了那些字段的值,因为现有的修改方法是用mybatis框架的updateById()方法写的,即使前端只传了主键ID和具体的修改字段,后端还是需要判断属性的非空,这时候就需要用到java的反射特性,去获取参数中不为空的字段,就可以得到具体修改的字段了
class.getDeclaredFields()方法用于获取类中声明的所有字段,包括公共、私有和受保护的字段,但不包括从父类继承的字段。
public boolean myUpdateById(VideoInfo videoInfo) {
//通过反射获取不为空的字段
Field[] fields = VideoInfo.class.getDeclaredFields();
for (Field field:fields){
field.setAccessible(true); //允许访问私有字段
try{
Object value = field.get(videoInfo);
if (value != null){
String name = field.getName();
}catch (Exception e){
e.printStackTrace();
}
}
}
这个方法返回一个Field对象数组,每个对象表示类中的一个字段,Object value = field.get(videoInfo);可以获取当前字段的值;field.getName();可以获取当前字段的名称
System.out.println(name+":"+value);
你会得到类似输出:
eewId:666666
这样就可以判断前端调用修改接口的时候具体修改了哪些字段了。
590

被折叠的 条评论
为什么被折叠?



