BeanUtils

HashMap对象转换为JavaBean对象

时光怂恿深爱的人放手 提交于 2020-08-14 03:39:39
问题:   在日常代码中,使用 spring包中的 BeanUtils.copyProperties(source,target),可以将A对象的属性复制到B对象中,但是有个问题 无法将HashMap中的属性复制到JavaBan对象中 解决方法:  引入 commons-beanutils依赖 < dependency > < groupId > commons-beanutils </ groupId > < artifactId > commons-beanutils </ artifactId > < version > 1.9.3 </ version > </ dependency >   使用 BeanUtils.populate(custVisitViewVO, map);可以将map复制到JavaBean中,注意第一个参数为target,第二个参数为source,与spring包中的BeanUtils正好相反 来源: oschina 链接: https://my.oschina.net/u/4295464/blog/4470143

几个 BeanUtils 中的坑,千万别踩!

左心房为你撑大大i 提交于 2020-08-13 04:24:39
作者:绝色天龙 来源:www.jianshu.com/p/357b55852efc 背景 最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。 根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是 静态内部类 ,还有两个是 list属性。 类似于下面这样: private List orders; private AddRequest.Ticket ticket; private List payments; AddRequest就是我们自己重写的请求类,他们SDK中的请求类是MixAddRequest,我们组装好请求参数后利用Spring的BeanUtils的copyProperties方法将AddRequest中的属性拷贝到MixAddRequest,然后发送请求。 到此为止,照理说一切完美! 结果请求失败,纳尼?对方说缺少一个必要的字段,参数校验不通过! 一查字段名称,是Ticket这个类里面的某个字段,赶紧看代码,心里充满对老代码的自信,想着一定是哪里搞错了,或者是他们那边偷偷动了代码,把字段从可选改为了必选,嘿嘿。 果然在代码里找到了设置的地方,这下应该是他们的问题确信无疑了,再开一把调试,准备宣判他们的死刑

丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!

故事扮演 提交于 2020-08-12 18:06:46
在前几天的文章《 为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy? 》中,我曾经对几款属性拷贝的工具类进行了对比。 然后在评论区有些读者反馈说MapStruct才是真的香,于是我就抽时间了解了一下MapStruct。结果我发现,这真的是一个神仙框架,炒鸡香。 这一篇文章就来简单介绍下MapStruct的用法,并且再和其他几个工具类进行一下对比。 为什么需要MapStruct ? 首先,我们先说一下MapStruct这类框架适用于什么样的场景,为什么市面上会有这么多的类似的框架。 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。很多人都对三层架构、四层架构等并不陌生。 甚至有人说: "计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,如果不行,那就加两层。" 但是,随着软件架构分层越来越多,那么各个层次之间的数据模型就要面临着相互转换的问题,典型的就是我们可以在代码中见到各种O,如DO、DTO、VO等。 一般情况下,同样一个数据模型,我们在不同的层次要使用不同的数据模型。 如在数据存储层,我们使用DO来抽象一个业务实体;在业务逻辑层,我们使用DTO来表示数据传输对象;到了展示层,我们又把对象封装成VO来与前端进行交互。 那么,数据的从前端透传到数据持久化层(从持久层透传到前端),就需要进行对象之间的互相转化

java Beanutils.copyProperties( )用法

主宰稳场 提交于 2020-08-12 02:55:41
这是一篇开发自辩甩锅稿~~~~ 昨天测试小姐姐将我的一个bug单重开了,emmmm....内心OS:就调整下对象某个属性类型这么简单的操作,我怎么可能会出错呢,一定不是我的锅!!but再怎么抗拒,bug还是要改的,毕竟晚上就要发版本了~~ 老老实实将我前天改的部分跟了一遍,恩,完美,没有任何的缺失~~but本应success的测试数据,接口返还的结果确实是false来着,那还是老老实实debug吧。 一步步跟下来,恩,多么顺畅,就说一定不是我的锅~~诶?不对不对,这里的ID值,为啥是null?传过来有值的呀!!发现原来是别人在修复bug时用了Beanutils.copyProperties( obj1,obj2),but 因为obj1中属性名称id,obj2中属性名称afterId,因为Beanutils.copyProperties( )要求处理的两个对象的属性名称相同时才可以正常赋值,那好吧,我们今天就好好讲讲关于 Beanutils.copyProperties( )吧~ 1、简介 BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。 2、用法 如果有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm。例如:一个用户注册页面

文件下载——下载Excel

本秂侑毒 提交于 2020-08-11 02:16:06
1、首先准备好数据。这里的数据不是直接从数据库中查到的数据而是将查到的数据复制一份,两者的数据互不影响,这样有利于复制之后的数据可以修改。   ① 定义一个从数据库中查到的数据的方法(service层的实现类方法),这里省略mapper映射文件和dao层接口的方法   /** * 参数是实体类,根据参数条件获取所有的数据。forEach方法只是循环遍历获取的元素,可以根据业务需求修改元素的属性值 * / public List<User> export(User user) { List<User> userList = userDao.selectAll(user); userList.stream().forEach(e->{ // 密码回显字符表示 e.setPassword(e.getPassword().replaceAll(e.getPassword(), "******")); }); return userList; }   ② 定义一个复制数据的方法,方法中可以使用Spring框架提供的BeanUtils包的copyProperties方法来复制对象的属性 /** * 复制属性的方法 */ public List<User> queueExcel(User user) { List <User> userList = export(user); List

上线前一个小时,dubbo这个问题可把我折腾惨了

扶醉桌前 提交于 2020-08-10 06:51:35
前因 那是一个月黑风高的夜晚,不管有没有圆圆的月亮,都无法解救要加班的我。这就是苦涩的人生啊! 那天正好是春节回家的日子,定了晚上的票,然后还是上线的日子。 测试在做回归测试的时候,发现一个老功能报错了,什么鬼,都没改过那块代码怎么会出问题?案件疑点重重呀。。。 为了能够早点上线,早点回家,所以这个 Bug 就显得十万火急了,因为就这一个问题,其他都没问题,解决好了就可以上线了,于是开启了破案之路。 第一步:找到错误信息 机智的我在第一时间打开了 Cat 查看具体的错误,由于当时并没有想到去写一篇文章出来,错误信息也就没有截图,后面通过模拟的操作,得到了类似的一样的错误信息如下: Cat错误信息 居然是类转换错误,点进去查看详细的错误信息,如下图: Cat错误详情 真正有价值的错误信息如下: dubbo version: 2 .7 .3, current host: 192 .168 .8 .224 java .lang .ClassCastException: java .util .HashMap cannot be cast to com .cxytiandi .kittycloud .user .api .request .Address 第二步:排查报错的代码 公司代码不方便透露,下面都是模拟的代码: public ResponseData<String> login

Java实现浏览器端大文件分片上传组件

纵然是瞬间 提交于 2020-08-08 13:55:44
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext

No value specified for Date

坚强是说给别人听的谎言 提交于 2020-08-06 09:44:43
BeanUtils.copyProperties复制对象异常: ConvertUtils.register(new DateConverter(null), java.util.Date.class); BeanUtils.copyProperties(newEmployerReceiptInfo,entity); 来源: oschina 链接: https://my.oschina.net/xinyuanKong/blog/4292963

几个 BeanUtils 中的坑,千万别踩!

主宰稳场 提交于 2020-08-05 02:25:04
作者:绝色天龙 来源:www.jianshu.com/p/357b55852efc 背景 最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。 根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是 静态内部类 ,还有两个是 list属性。 类似于下面这样: private List orders; private AddRequest.Ticket ticket; private List payments; AddRequest就是我们自己重写的请求类,他们SDK中的请求类是MixAddRequest,我们组装好请求参数后利用Spring的BeanUtils的copyProperties方法将AddRequest中的属性拷贝到MixAddRequest,然后发送请求。 到此为止,照理说一切完美! 结果请求失败,纳尼?对方说缺少一个必要的字段,参数校验不通过! 一查字段名称,是Ticket这个类里面的某个字段,赶紧看代码,心里充满对老代码的自信,想着一定是哪里搞错了,或者是他们那边偷偷动了代码,把字段从可选改为了必选,嘿嘿。 果然在代码里找到了设置的地方,这下应该是他们的问题确信无疑了,再开一把调试,准备宣判他们的死刑

Bean后置处理器

拥有回忆 提交于 2020-08-05 01:07:11
创建完对象之后, 接下来, 就应该想办法对属性进行注入了, 其中就包括 @Autowired 注入 但是在注入之前, 貌似 还没有对 @Autowired 进行扫描和解析. 代码块: if (instanceWrapper == null ) { /** * 创建 bean 实例,并将实例包裹在 BeanWrapper 实现类对象中返回。 * createBeanInstance中包含三种创建 bean 实例的方式: * 1. 通过工厂方法创建 bean 实例 * 2. 通过构造方法自动注入(autowire by constructor)的方式创建 bean 实例 * 3. 通过无参构造方法方法创建 bean 实例 * * 若 bean 的配置信息中配置了 lookup-method 和 replace-method,则会使用 CGLIB 增强 bean 实例。 */ instanceWrapper = createBeanInstance(beanName, mbd, args); } final Object bean = instanceWrapper.getWrappedInstance(); Class <?> beanType = instanceWrapper.getWrappedClass(); if (beanType != NullBean. class )