neuqdarcy

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

对复杂Java POJO 字段赋值

背景

上周遇到了一个安全需求,要求外部接口不能返回手机号字段。难点在于,外部接口和内部接口调用的是同一个方法,所以只能在接口返回的地方做处理逻辑。当时为了快速上线,用的办法是把手机号字段取出,置为null,然后再set回去。因为接口返回的POJO比较复杂,嵌套层级多,所以这个办法不优雅。
问题来了,假设有一个复杂的POJO对象,如何快速给某个字段赋值,而不需要关心对象嵌套关系呢?

解决方法

使用了Java的反射

public static void setField(Object obj, String fieldName, Object target) throws IllegalAccessException {
// 取出所有字段,包括 public 和 private
var fields = obj.getClass().getDeclaredFields();
for (java.lang.reflect.Field field : fields) {
// 设置为可访问
field.setAccessible(true);
var o = field.get(obj);
// 如果是目标字段,则设置为目标值
if (field.getName().equals(fieldName)) {
field.set(obj, target);
return;
}
// 如果是基本数据类型,就直接跳过
if (o.getClass().getClassLoader() == null) {
continue;
} else {
// 如果是引用数据类型,就进行递归调用,直到遍历完所有字段或找到目标字段
setField(o, fieldName, target);
}
}
}

posted on   爱吃橘子的胖达  阅读(44)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示