您好,登錄后才能下訂單哦!
本篇內容主要講解“BeanUtils.copyProperties復制屬性失敗的原因以及解決方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“BeanUtils.copyProperties復制屬性失敗的原因以及解決方法”吧!
BeanUtils.copyProperties復制屬性失敗
描述
解決辦法
BeanUtils.copyProperties應用的改進
為解決這個問題我重寫了部分spring BeanUtils的代碼
在JavaE中使用 BeanUtils.copyProperties,把A對象的name、age等屬性復制到B對象中,A與B對象的類型不同。出現的問題是復制屬性失敗,根本原因是 BeanUtils找不到set、get方法。
import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(one, monitorCount);
1,為復制對象的屬性增加set、get方法。比如給name、age屬性增加set、get方法。
2,也可以使用插件生成setter、getter比如:
package com.css.oa.exam.monitor.bean; import lombok.Data; //使用lombok插件 @Data //使用這個注解可以生成setter public class AssignOne{ public String name; public String age; }
在MVC的開發模式中經常需要將model與pojo的數據綁定,apache和spring的工具包中都有BeanUtils,使用其中的copyProperties方法可以非常方便的進行這些工作,但在實際應用中發現,對于null的處理不太符合個人的需要,例如在進行修改操作中只需要對model中某一項進行修改,那么一般我們在頁面上只提交model的ID及需要修改項的值,這個時候使用BeanUtils.copyProperties會將其他的null綁定到pojo中去。
如下:
public abstract class BeanUtils extends org.springframework.beans.BeanUtils { public static void copyProperties(Object source, Object target) throws BeansException { Assert.notNull(source, "Source must not be null"); Assert.notNull(target, "Target must not be null"); Class<?> actualEditable = target.getClass(); PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable); for (PropertyDescriptor targetPd : targetPds) { if (targetPd.getWriteMethod() != null) { PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName()); if (sourcePd != null && sourcePd.getReadMethod() != null) { try { Method readMethod = sourcePd.getReadMethod(); if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { readMethod.setAccessible(true); } Object value = readMethod.invoke(source); // 這里判斷以下value是否為空 當然這里也能進行一些特殊要求的處理 例如綁定時格式轉換等等 if (value != null) { Method writeMethod = targetPd.getWriteMethod(); if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { writeMethod.setAccessible(true); } writeMethod.invoke(target, value); } } catch (Throwable ex) { throw new FatalBeanException("Could not copy properties from source to target", ex); } } } } } }
apahce的BeanUtils的處理方法類似
到此,相信大家對“BeanUtils.copyProperties復制屬性失敗的原因以及解決方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。