91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

泾源县| 桐柏县| 绥化市| 仁化县| 菏泽市| 土默特左旗| 定西市| 南木林县| 安国市| 宝鸡市| 克什克腾旗| 柳林县| 南乐县| 宝兴县| 鄯善县| SHOW| 修水县| 商丘市| 道孚县| 大方县| 思南县| 芦山县| 双桥区| 梁平县| 金坛市| 巢湖市| 邳州市| 崇礼县| 榆林市| 玉林市| 蚌埠市| 新营市| 台前县| 新源县| 池州市| 威宁| 神农架林区| 那坡县| 阿克陶县| 郴州市| 罗江县|