中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

BeanUtils.copyProperties復制屬性失敗的原因以及解決方法

發布時間:2021-08-31 12:50:08 來源:億速云 閱讀:556 作者:chen 欄目:開發技術

本篇內容主要講解“BeanUtils.copyProperties復制屬性失敗的原因以及解決方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“BeanUtils.copyProperties復制屬性失敗的原因以及解決方法”吧!

目錄
  • BeanUtils.copyProperties復制屬性失敗

    • 描述

    • 解決辦法

  • BeanUtils.copyProperties應用的改進

    • 為解決這個問題我重寫了部分spring BeanUtils的代碼

BeanUtils.copyProperties復制屬性失敗

描述

在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; 
}

BeanUtils.copyProperties應用的改進

在MVC的開發模式中經常需要將model與pojo的數據綁定,apache和spring的工具包中都有BeanUtils,使用其中的copyProperties方法可以非常方便的進行這些工作,但在實際應用中發現,對于null的處理不太符合個人的需要,例如在進行修改操作中只需要對model中某一項進行修改,那么一般我們在頁面上只提交model的ID及需要修改項的值,這個時候使用BeanUtils.copyProperties會將其他的null綁定到pojo中去。

為解決這個問題我重寫了部分spring BeanUtils的代碼

如下:

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復制屬性失敗的原因以及解決方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文成县| 隆子县| 綦江县| 荥阳市| 固始县| 前郭尔| 洛宁县| 崇文区| 阿克陶县| 申扎县| 龙海市| 榆林市| 浮山县| 化德县| 久治县| 教育| 乌拉特中旗| 广汉市| 黑水县| 汶川县| 庄浪县| 扎囊县| 宜黄县| 兰西县| 修武县| 赤城县| 新和县| 禹城市| 达日县| 莱阳市| 丰宁| 长沙县| 上蔡县| 特克斯县| 屏南县| 平凉市| 广德县| 育儿| 遂昌县| 渝北区| 麻栗坡县|