BeanUtilsなどを使用して、null以外のプロパティをあるオブジェクトから別のオブジェクトにコピーします

いつか

私の目的は、あるオブジェクトのフィールドを別のオブジェクトにコピーすることですが、nullではないフィールドのみをコピーします。明示的に割り当てたくありません。より一般的なソリューションは、特定のフィールドのみの提供を許可するREST APIでPATCHを実装する場合など、非常に便利で保守が容易です。

私はこの同様のスレッドを見て、ここからいくつかのアイデアを実装しようとしています:オブジェクトから別のオブジェクトにnull以外のプロパティをコピーするためのヘルパー?(Java)

ただし、プログラムの実行後、オブジェクトは変更されません。

たとえば、作成したクラスの例を次に示します。

class Person {
    String name;
    int age;
    Pet friend;

    public Person() {
    }

    public Person(String name, int age, Pet friend) {
        this.name = name;
        this.age = age;
        this.friend = friend;
    }

    // getters and setters here
}

class Pet {
    String name;
    int age;

    public Pet(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getters and setters here
}

これが私のオーバーライドされたcopyPropertyメソッドです:

import org.apache.commons.beanutils.BeanUtilsBean;
import java.lang.reflect.InvocationTargetException;

public class MyBeansUtil extends BeanUtilsBean {

@Override
public void copyProperty(Object dest, String name, Object value)
        throws IllegalAccessException, InvocationTargetException {
    if(value == null) return;
    super.copyProperty(dest, name, value);
}
}

...そしてここに私がいくつかの例でそれをテストしようとしている場所があります:

public class SandBox {
    public static void main(String[] args) {
        Person db = new Person("John", 36, new Pet("Lucy", 3));
        Person db2 = new Person("John", 36, new Pet("Lucy", 2));
        Person db3 = new Person("John", 36, new Pet("Lucy", 4));

        Person in = new Person();
        in.age = 17;
        in.name = "Paul";
        in.friend = new Pet(null, 35);

        Person in2 = new Person();
        in2.name = "Damian";

        Person in3 = new Person();
        in3.friend = new Pet("Lup", 25);

        try {
            BeanUtilsBean notNull  =new MyBeansUtil();
            notNull.copyProperties(db, in);
            notNull.copyProperties(db2, in2);
            notNull.copyProperties(db3, in3);

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

残念ながら、元のオブジェクトdb、db1、db2は以前と同じままです。私はここで何か間違ったことをしていますか?

いつか

最終的にSpringBeanUtilsライブラリを使用しました。これが私の作業方法です:

import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;

import java.lang.reflect.Field;
import java.util.Collection;

public class MyBeansUtil<T> {
    public T copyNonNullProperties(T target, T in) {
        if (in == null || target == null || target.getClass() != in.getClass()) return null;

        final BeanWrapper src = new BeanWrapperImpl(in);
        final BeanWrapper trg = new BeanWrapperImpl(target);

        for (final Field property : target.getClass().getDeclaredFields()) {
            Object providedObject = src.getPropertyValue(property.getName());
            if (providedObject != null && !(providedObject instanceof Collection<?>)) {
                trg.setPropertyValue(
                        property.getName(),
                        providedObject);
            }
        }
        return target;
    }
}

正常に動作しますが、コレクションであるフィールドを無視することに注意してくださいそれはわざとです、私はそれらを別々に扱います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

BeanUtilsなどを使用して、null以外のプロパティをあるオブジェクトから別のオブジェクトにコピーします

分類Dev

anglejs-あるオブジェクトから別のオブジェクトに共通のプロパティをコピーします

分類Dev

Angularを使用して、オブジェクトのプロパティ(値なし)を別のオブジェクトにコピーします

分類Dev

プロパティjavascriptではなく、あるオブジェクトの値のみを別のオブジェクトにコピーします

分類Dev

プロパティに基づいて、リストオブジェクトをあるリストから別のリストにコピーします

分類Dev

null以外のプロパティをオブジェクトから別のプロパティにコピーするためのヘルパー?(Java)

分類Dev

JavascriptまたはjQueryを使用してプロパティを追加せずに、オブジェクトのプロパティを別のオブジェクトにコピーするにはどうすればよいですか?

分類Dev

mongodb:配列プロパティを1つのオブジェクトから別のオブジェクトにコピーします

分類Dev

ある.netオブジェクトから別の.netオブジェクトにプロパティをコピーする方法

分類Dev

あるオブジェクトの選択したプロパティ値を別のオブジェクトにコピーする

分類Dev

現在のオブジェクトからプロパティを取得して、別のオブジェクトのプロパティ値を使用する

分類Dev

Javascript-あるオブジェクトから別の新しいオブジェクトに特定のプロパティをディープコピーします

分類Dev

Javascript-あるオブジェクトから別の新しいオブジェクトに特定のプロパティをディープコピーします

分類Dev

条件付きで1つのオブジェクトから別のオブジェクトにプロパティをコピーする

分類Dev

オブジェクトのプロパティをGroovyの別のオブジェクトにコピーします

分類Dev

計算されたオブジェクト内のオブジェクトプロパティを取得すると、オブジェクト自体ではなく未定義になるのはなぜですか?このコンテキストでは、どちらのアプローチが適していますか?

分類Dev

VBAクラスモジュール:別のプロパティを使用してオブジェクトからプロパティを取得します

分類Dev

オブジェクトのプロパティを別のスキップする未定義のプロパティにコピーします

分類Dev

すべてのオブジェクトプロパティ値がtrueになるのを待ってから、コードの実行を続行します

分類Dev

ConfigurationElementCollection内のオブジェクトのプロパティを配列にコピーしますか?

分類Dev

RealmListをプロパティとして含むRealm内のオブジェクトをディープコピーし、RealmListオブジェクトが同じオブジェクトを参照しないようにする方法

分類Dev

Pythonでオブジェクトのすべてのプロパティを別のオブジェクトにコピーする方法は?

分類Dev

新しい着信オブジェクトから変更されていない元のオブジェクトのプロパティを保持するオブジェクトの配列からマージされたオブジェクトを作成するにはどうすればよいですか?

分類Dev

Angular-2:あるオブジェクトを別のオブジェクトにコピーします

分類Dev

JSはあるオブジェクトを別のオブジェクトにコピーします

分類Dev

角度jsを使用して、プロパティのオブジェクトとオブジェクトの配列にオブジェクトを追加します

分類Dev

オブジェクトの配列から、各オブジェクトのプロパティの値を抽出し、異なる配列に配置します

分類Dev

Java-あるリストのオブジェクトプロパティを別のオブジェクトリストにマップします

分類Dev

オブジェクトに空のプロパティがあるかどうかを確認します

Related 関連記事

  1. 1

    BeanUtilsなどを使用して、null以外のプロパティをあるオブジェクトから別のオブジェクトにコピーします

  2. 2

    anglejs-あるオブジェクトから別のオブジェクトに共通のプロパティをコピーします

  3. 3

    Angularを使用して、オブジェクトのプロパティ(値なし)を別のオブジェクトにコピーします

  4. 4

    プロパティjavascriptではなく、あるオブジェクトの値のみを別のオブジェクトにコピーします

  5. 5

    プロパティに基づいて、リストオブジェクトをあるリストから別のリストにコピーします

  6. 6

    null以外のプロパティをオブジェクトから別のプロパティにコピーするためのヘルパー?(Java)

  7. 7

    JavascriptまたはjQueryを使用してプロパティを追加せずに、オブジェクトのプロパティを別のオブジェクトにコピーするにはどうすればよいですか?

  8. 8

    mongodb:配列プロパティを1つのオブジェクトから別のオブジェクトにコピーします

  9. 9

    ある.netオブジェクトから別の.netオブジェクトにプロパティをコピーする方法

  10. 10

    あるオブジェクトの選択したプロパティ値を別のオブジェクトにコピーする

  11. 11

    現在のオブジェクトからプロパティを取得して、別のオブジェクトのプロパティ値を使用する

  12. 12

    Javascript-あるオブジェクトから別の新しいオブジェクトに特定のプロパティをディープコピーします

  13. 13

    Javascript-あるオブジェクトから別の新しいオブジェクトに特定のプロパティをディープコピーします

  14. 14

    条件付きで1つのオブジェクトから別のオブジェクトにプロパティをコピーする

  15. 15

    オブジェクトのプロパティをGroovyの別のオブジェクトにコピーします

  16. 16

    計算されたオブジェクト内のオブジェクトプロパティを取得すると、オブジェクト自体ではなく未定義になるのはなぜですか?このコンテキストでは、どちらのアプローチが適していますか?

  17. 17

    VBAクラスモジュール:別のプロパティを使用してオブジェクトからプロパティを取得します

  18. 18

    オブジェクトのプロパティを別のスキップする未定義のプロパティにコピーします

  19. 19

    すべてのオブジェクトプロパティ値がtrueになるのを待ってから、コードの実行を続行します

  20. 20

    ConfigurationElementCollection内のオブジェクトのプロパティを配列にコピーしますか?

  21. 21

    RealmListをプロパティとして含むRealm内のオブジェクトをディープコピーし、RealmListオブジェクトが同じオブジェクトを参照しないようにする方法

  22. 22

    Pythonでオブジェクトのすべてのプロパティを別のオブジェクトにコピーする方法は?

  23. 23

    新しい着信オブジェクトから変更されていない元のオブジェクトのプロパティを保持するオブジェクトの配列からマージされたオブジェクトを作成するにはどうすればよいですか?

  24. 24

    Angular-2:あるオブジェクトを別のオブジェクトにコピーします

  25. 25

    JSはあるオブジェクトを別のオブジェクトにコピーします

  26. 26

    角度jsを使用して、プロパティのオブジェクトとオブジェクトの配列にオブジェクトを追加します

  27. 27

    オブジェクトの配列から、各オブジェクトのプロパティの値を抽出し、異なる配列に配置します

  28. 28

    Java-あるリストのオブジェクトプロパティを別のオブジェクトリストにマップします

  29. 29

    オブジェクトに空のプロパティがあるかどうかを確認します

ホットタグ

アーカイブ