首页 > 编程语言 >对复杂Java POJO 字段赋值

对复杂Java POJO 字段赋值

时间:2024-02-22 17:12:20浏览次数:45  
标签:Java 接口 field fieldName POJO obj 赋值

背景

上周遇到了一个安全需求,要求外部接口不能返回手机号字段。难点在于,外部接口和内部接口调用的是同一个方法,所以只能在接口返回的地方做处理逻辑。当时为了快速上线,用的办法是把手机号字段取出,置为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);
            }
        }
    }

标签:Java,接口,field,fieldName,POJO,obj,赋值
From: https://www.cnblogs.com/neuqdarcy/p/17946124

相关文章

  • java
    一、jvm参数-Xms:堆内存的初始大小,默认为物理内存的1/64-Xmx:堆内存的最大大小,默认为物理内存的1/4-Xmn:堆内新生代(新生成的对象)的大小。通过这个值也可以得到老生代的大小,即-Xmx减去-Xmn-Xss:设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的......
  • java 如何生成doc文档
    cmd命令行:javadoc-encodingUTF-8-charsetUTF-8Doc.java或者在idea中下载差价javaDoc插件,来进行尝试,下载方法如下:如何使用详细教程可以面向百度......
  • Java和LWJGL的关于OpenAL的文章
    一、OpenAL的原理和基本概念:1.1OpenAL的架构OpenAL的架构同样基于三个核心组件:Context(上下文)、Source(声源)和Buffer(缓冲区)。Context代表了音频处理的环境,Source是具体的音频播放源,而Buffer则用于存储音频数据。1.2音频渲染流程OpenAL处理音频的流程包括将音频数据从Buffer传......
  • Java_10 注解与反射
    title:(在线学习平台)link:(https://www.acwing.com/)cover:(https://cdn.acwing.com/media/activity/surface/log.png)1注解(1)注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。(2)注解不影响程序逻辑,但注解可以被编译或运......
  • java xmx 和 xx:permsize 合理配置
    JVM虚拟机选项:XmsXmxPermSizeMaxPermSize区别java虽然是自动回收内存,但是应用程序,尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。举例说明含义:-Xms128m表示JVMHeap(堆内存)最小尺寸128MB,初始分配-Xmx512m表示JVMHeap(堆内存)最大允许的......
  • 【JAVA】函数式接口示例
     Java的函数式接口提供了更简洁和声明性的方式来处理数据。以下是一些使用Predicate<T>、Function<T,R>、Consumer<T>和Supplier<T>的代码示例 Predicate(谓词语句)importjava.util.function.Predicate;publicclassPredicateExample{publicstaticvoidmain(Str......
  • Javamis 监控管理 - 服务监控模块开发过程详述(超详细图文说明)
    文章目录一、第一章、为什么要研发[服务监控]功能模块二、第二章、[服务监控]功能模块开发过程2.1.、引入依赖包2.2、开发过程2.2.1、实体类2.2.2、控制层类2.2.3、页面展示   前言    本来想着等待javamis低......
  • JAVA 学习路线
    1.首先是java基础(常用类,集合和IO)2.其次就是GUI编程3.学习网络编程和多线程基础4.对注解和反射进行了解5.有兴趣可以学习JVM(JUC并发编程以后再看)6.html5和CSS3和JS适当了解7.MYSQL数据库重点 Javaweb基础一定打好 这两个非常重要8.mybatis框架spring5和springmvc框......
  • 【Java】反应式编程 之 Mono.defer与Mono.just
    Mono.defer方法创建数据源属于懒汉型,Mono.just方法创建数据源属于恶汉型,下面看一个例子:packagecom.example.demo;importorg.junit.jupiter.api.Test;importorg.springframework.boot.test.context.SpringBootTest;importreactor.core.publisher.Mono;importjava.util......
  • 05-JavaScript基础语法
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-基础语法</title></head><body></body><script>//输出语句//1.alert()弹出警告框aler......