最新要闻
- 漫评美国通货膨胀:“陷入困境”
- 快看:女孩出考场接受采访:与母亲同框被路人误认为姐妹
- 近视用户不得不戴!Vision Pro配套镜片售价或超2000元
- 每日观察!性能媲美同档台式机!小米迷你主机限时打折:高考生到手2849元起
- 精彩看点:曾以“上四休三”上热搜:长沙一公司取消了所有的调休
- 高考结束后亲友团横幅有点大胆:可以谈恋爱啦 环球快播
- 环球观热点:不含SMR好评 希捷22TB NAS专用硬盘开卖:只要4200多
- 酷派大观50s现身电信产品库:天玑700 720P分辨率
- 全球观察:新能源车越卖越亏?广汽董事长曾庆洪:钱让外国朋友赚了
- 时隔22年 微软发布WinXP蓝天白云壁纸4K高清版:免费下载
- iQOO杀疯了!1TB UFS 4.0闪存只要3699元:同档位绝无仅有 环球视点
- 迪士尼被曝大量低价团购票无法入园 平台回应:旅行社操作失误 全球信息
- 5.8英寸塞进骁龙8 Gne2!小屏旗舰华硕Zenfone 10海外官宣
- 余承东同款座驾!AITO问界M5智驾版下周开启交付
- 保时捷发布史上最有科技感纯电超跑Mission X:动力超过1000匹 极速320公里/小时_消息
- 马斯克嘲讽苹果AR头显:花3500美元买它 不如20美元买包致幻菇_全球看热讯
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Java对象中转换空值的字段 今日观点
在后端返回数据给前端时,公司的框架会把值为null的数据去掉,方便前端取值。
如:Person对象为:{name:"浩二", age:24, weight:null, height:114},那返回给前端的就为{name:"浩二", age:24, height:114}。
如果这个时候有个需求:
(资料图片仅供参考)
Integer类型的字段为null给-1
Long类型的字段为null给-1L
String类型的字段为null给""(空字符串)
对象类型的字段为null给new对象,
不能直接动框架,因此需要手动转化。
代码写死转换
这种是最简单的方式,顾名思义,写死代码的方式一个一个字段来转换
示例
转换对象 ConvertNullFiledInfo:
@Datapublic class ConvertNullFiledInfo { private Integer intNum; private Long longNum; private String str; private ConvertNullFiledInfo info;}
转换代码:
@Servicepublic class ConvertNullFiledService { /** * 写死代码的方式一个一个字段来转换 * @param info * @return */ public ConvertNullFiledInfo convertFunction01(ConvertNullFiledInfo info) { info.setIntNum(info.getIntNum() == null ? -1 : info.getIntNum()); info.setLongNum(info.getLongNum() == null ? -1L : info.getLongNum()); info.setStr(info.getStr() == null ? "" : info.getStr()); info.setInfo(info.getInfo() == null ? new ConvertNullFiledInfo() : info.getInfo()); return info; } }
测试代码:
import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@SpringBootTest@RunWith(SpringRunner.class)public class ConvertNullFiledServiceTest { @Autowired private ConvertNullFiledService convertNullFiledService; @Test public void convertFunction01() { // str和info字段给null ConvertNullFiledInfo info = createConvertNullFiledInfo(1, 1L, null, null); ConvertNullFiledInfo result = convertNullFiledService.convertFunction01(info); System.out.println(result); } /** * 自定义字段创建ConvertNullFiledInfo * @param intNum * @param longNum * @param str * @param info * @return */ private ConvertNullFiledInfo createConvertNullFiledInfo(Integer intNum, Long longNum, String str, ConvertNullFiledInfo info) { ConvertNullFiledInfo result = new ConvertNullFiledInfo(); result.setIntNum(intNum); result.setLongNum(longNum); result.setStr(str); result.setInfo(info); return result; } }
运行结果:
可以看到是正常转换了的
问题点
这样写虽然简单方便,但是如果有非常多的对象需要转换,就会有许多重复代码;
而且如果字段有修改(类型、名称、被删除、新增),就需要在去转换方法中修改,因此可以用更好的方式。
遍历Filed转换
所有对象都有Class
因此可以使用这种方式来转换。
示例
转换代码:
/** * 遍历field的方式一个一个字段来转换 * @param info * @return */ public ConvertNullFiledInfo convertByField(ConvertNullFiledInfo info) { try { Field[] fields = info.getClass().getDeclaredFields(); for (Field field : fields) { // 设置可访问私有变量 field.setAccessible(true); // 获取当前字段值 Object value = field.get(info); // value不为空就跳过 if (value != null) { continue; } // 获取当前字段类型 Class> type = field.getType(); if (type == Integer.class) { // Integer类型就设置为-1 field.set(info, -1); } else if (type == Long.class) { // Long类型就设置为-1L field.set(info, -1L); } else if (type == String.class) { // String类型就设置为“” field.set(info, ""); } else if (type == ConvertNullFiledInfo.class) { // ConvertNullFiledInfo类型就设置为新对象 field.set(info, new ConvertNullFiledInfo()); } } } catch (Exception e) { e.printStackTrace(); } return info; }
测试代码:
@Testpublic void convertByField() { // str和info字段给null ConvertNullFiledInfo info = createConvertNullFiledInfo(1, 1L, null, null); ConvertNullFiledInfo result = convertNullFiledService.convertByField(info); System.out.println(result);}
运行结果:
可以看到也是成功转换了
问题点
这种写法仍然存在问题,可以看到方法的传参和返回值都是固定类型为ConvertNullFiledInfo,
并且在遍历field的时候,也有if判断是写定的ConvertNullFiledInfo,
因此也在一定程度上写死了代码
优化
为了避免写死的情况,可以使用泛型来写
转换代码:
@Servicepublic class ConvertNullFiledService{ /** * 使用泛型,遍历field的方式一个一个字段来转换 * @param object * @return */ public T convertByFieldGeneric(T object) { try { Field[] fields = object.getClass().getDeclaredFields(); for (Field field : fields) { // 设置可访问私有变量 field.setAccessible(true); // 获取当前字段值 Object value = field.get(object); // value不为空就跳过 if (value != null) { continue; } // 获取当前字段类型 Class> type = field.getType(); if (type == Integer.class) { // Integer类型就设置为-1 field.set(object, -1); } else if (type == Long.class) { // Long类型就设置为-1L field.set(object, -1L); } else if (type == String.class) { // String类型就设置为“” field.set(object, ""); } else if (type == object.getClass()) { // T类型就设置为新对象 Object newObj = object.getClass().newInstance(); field.set(object, newObj); } } } catch (Exception e) { e.printStackTrace(); } return object; }}
测试代码:
@Testpublic void convertByFieldGeneric() { // 全部字段给null ConvertNullFiledInfo info = createConvertNullFiledInfo(null, null, null, null); ConvertNullFiledInfo result = (ConvertNullFiledInfo) convertNullFiledService.convertByFieldGeneric(info); System.out.println(result);}
运行结果:
成功转换
关键词:
Java对象中转换空值的字段 今日观点
世界报道:Web安全-渗透测试-基础知识05
当前观察:这就是信心|优化营商环境 各地硬招、实招频出
漫评美国通货膨胀:“陷入困境”
快看:女孩出考场接受采访:与母亲同框被路人误认为姐妹
近视用户不得不戴!Vision Pro配套镜片售价或超2000元
每日观察!性能媲美同档台式机!小米迷你主机限时打折:高考生到手2849元起
精彩看点:曾以“上四休三”上热搜:长沙一公司取消了所有的调休
高考结束后亲友团横幅有点大胆:可以谈恋爱啦 环球快播
别着急摆烂,看看你到底值多少钱? 全球热资讯
18-状态机_环球滚动
CCSP2019T2_纸牌计数 | 2019苏州CCSP大学生计算机系统与程序设计竞赛
天天热讯:生态 | Eolink x 火线安全,构建高效安全的一体化研测管理体系
Java 集合框架体系简介
【财经分析】绿色低碳转型亟需新动力 中国转型类债券市场蓄势待发 天天新资讯
环球观热点:不含SMR好评 希捷22TB NAS专用硬盘开卖:只要4200多
酷派大观50s现身电信产品库:天玑700 720P分辨率
全球观察:新能源车越卖越亏?广汽董事长曾庆洪:钱让外国朋友赚了
时隔22年 微软发布WinXP蓝天白云壁纸4K高清版:免费下载
浅谈这些年如何被MDK, IAR, GCC和厂家SDK版本兼容性“蹂躏”, 一代版本一代坑|世界头条
热点聚焦:java-基础安装-基础
环球视讯!数据的图像化之旅:探索GIS与可视化的无限可能
【独家】百度人脸识别_SpringBoot整合离线SDK
天天热讯:UDS统一诊断服务
【新华500】新华500指数(989001)9日涨0.45%
iQOO杀疯了!1TB UFS 4.0闪存只要3699元:同档位绝无仅有 环球视点
迪士尼被曝大量低价团购票无法入园 平台回应:旅行社操作失误 全球信息
5.8英寸塞进骁龙8 Gne2!小屏旗舰华硕Zenfone 10海外官宣
余承东同款座驾!AITO问界M5智驾版下周开启交付
保时捷发布史上最有科技感纯电超跑Mission X:动力超过1000匹 极速320公里/小时_消息
今日关注:17-呼吸灯
华为云 UCS GitOps:轻松交付多集群云原生应用
全球速看:OPEN AI 全新版本来了2.0.0永久免费在线体验构建AI开放生态
Angular4 教程_编程入门自学教程_菜鸟教程-免费教程分享
虚拟列表
马斯克嘲讽苹果AR头显:花3500美元买它 不如20美元买包致幻菇_全球看热讯
天天讯息:浓烟下的美国:N95口罩销量猛增逾10倍、中国产空气净化器大卖
环球时讯:16GB/32GB内存笔记本对比实测:16GB不够用了
讯飞星火认知大模型V1.5正式发布:知识问答突破 可以告别搜索了-环球百事通
2023年底更多极端天气来袭 美国警告厄尔尼诺已形成-世界热门
快资讯:特朗普因机密文件案被起诉 将于下星期出庭
车载雷达报警测试要点
快舟一号甲固体火箭第20次发射:“导里导气”
英国政府将对油气公司征收暴利税设定门槛
天天热点!.NET的8种JSON序列化反序列化工具供你选择
端午节火车票开售 热门车票“秒空”
基建狂魔新作!世界上建设难度最高的跨海集群工程:深中通道
另外赠送洁面乳:多芬氨基酸洁面泡泡2瓶49.9元发车(新低)|每日报道
全球短讯!大叔被疑偷拍自证清白后仍遭女子曝光 网友:太欺负人
考生考前与老师闲聊押中英语作文:十分幸运
陕西一考生考前与老师闲聊押中英语作文:十分幸运,考完第一时间找老师表达喜悦
茶颜悦色杯底现镊子,工作人员:是夹茶叶用的,已处理中|今日视点
住房公积金制度惠及面进一步扩大 去年全国发放贷款超万亿元|天天实时
天天关注:WPF中有中心点的slider滑动条
世界头条:易基因:全基因组DNA甲基化和小RNA分析揭示甘蓝型油菜种子的基因组不对称性
接口防刷处理方案,太优雅了!
Linux磁盘分区扩容-世界今亮点
ChatGTP:没人比我更懂诗歌_当前头条
四部门:深入开展家电以旧换新_天天即时看
美国铀期货U3O8价格于6月7日涨至56.25美元
方便英文单词_方便英文
医疗产业ETF(159877)涨0.67%,开立医疗涨5.08%,华兰股份涨5.31%
全球看点:唯美的歌词带意境(唯美的歌词)
天天快讯:中国无人驾驶高速地铁海外开工:最大载客量达1100人
16核i9+RTX 4060游戏本价格也被国产打下来了 七彩虹将星X15仅售5999|每日聚焦
【新要闻】赛力斯董事长张兴海:恶性竞争将毁掉企业和行业
全球关注:低头玩手机等于颈椎增压45斤!相当于6岁小孩骑脖子
马斯克要横扫欧洲!特斯拉全新超级工厂曝光:投资超300亿 或落地西班牙
陆家嘴数智天地·智慧谷项目亮相 金融科技企业拟在此设立研发总部
天天滚动:双方家长有矛盾怎么办 双方家长有矛盾怎么解决
全球微资讯!websocket
海外直播源码技术文字聊天功能的配置_当前速讯
深入浅出Spring原理及实战「缓存Cache开发系列」
每日快看:缯怎么读怎么组词_缯怎么读
环球时讯:英特尔开始停产11代处理器
王治郅视频_王治郅事件-全球最新
莫兰迪作品高清大图_莫兰迪作品 每日精选
天天消息!22.5万起 小鹏G6开启预售 官方:真正的6边形战士来了
全球实时:惠普推出新款无线耳机:充电盒自带触控屏 控制音乐播放
全球快播:高考考生遇采访喊话:取消调休 取消调休
网购格力空调收到“木各力”牌 商家拒绝退款
余承东:特斯拉FSD进入中国我们也不怕 依然可以遥遥领先
焦点快播:gtx260m显卡(gtx260m)
高考前最后一课丨常德市七中老师收到全班学生送的礼物 笑着笑着就哭了_当前快讯
dnf带幻影的史诗武器(dnf幻影手镯) 世界热闻
当前速递!猪菜磨底VS服务回暖!5月CPI或小幅反弹
热讯:流年
世界百事通!深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等
每日资讯:美团太细了:Springcloud 微服务优雅停机,如何实现?
全网Jenkins+Gitee+Docker/SSH 部署避坑点总结 每日关注
全球通讯!人工智能(AI)热潮提振了的科技股,并推高了对冲基金的回报,帮助他们挽回去年的损失
今日快讯:热力学第一定律功能关系(热力学第一定律)
热消息:favorite subject(favorite)
天天看点:辽宁省沈阳市2023-06-06 16:27发布大风蓝色预警
每日报道:qq显示iphone在线没有显示4g(qq显示iphone在线)
全球百事通!正整数包括什么分数(正整数包括什么)
鸡汤用高压锅煮要煮多久 高压锅炖鸡汤要压多少分钟
守护者之铠(永恒守护者腿铠)-全球消息
充满“海洋”味!比亚迪宋PLUS冠军版来了:选它还是四驱哈弗枭龙MAX
世界热头条丨精装版丰田陆巡 全新雷克萨斯GX全球首发:能越野的日系豪华!