Lombokアノテーションでspringbootを使用するBeanUtils.copyPropertiesが無効です

問題現象:

今日のプロジェクトで使用 

BeanUtils.copyProperties(userInfo, bladeUserVo);

コピーのすべての属性値にユーザ情報オブジェクトを属性と同じ名前のbladeUserVoオブジェクトしかし、失敗しました


問題分析:

コードを見ると、次のことがわかります。

@Getterおよび@Setterコメントのlombokプラグ使用されるエンティティクラスの元のオブジェクトのため

そして、BeanUtils.copyProperties(A、B);最初にAオブジェクトgetterメソッドとsetterメソッドを見つけ次にBオブジェクトでgetterメソッドとsetterメソッドを見つけ、対応するメソッドプロパティ名照合して、プロパティ値のコピー、

ただし、lombokプラグインのみを使用した後、Aオブジェクトのgetterメソッドとsetterメソッド処理ロジック変更されます。これは、元のJavaロジックとは異なります。

lombokプラグアレンジされた@Accessors(chain = true)アノテーション、アノテーションは、元のvoidから属性タイプ(String、int、Integerなど)まで、オブジェクトの値を返すセッターメソッドとして機能できます


解決:

1. lombokプラグインを使用しないでください

実際、lombokプラグインはコードを便利に見せますが、getter / setterメソッドのロジックはあまり変更されていないため、パッケージ化後は大きくなりますが、追加のプラグイン依存関係パッケージがあります。

ゲッター/セッターメソッドを自分で手動で定義することをお勧めします。また、一部のメソッド(BeanUtils.copyProperties(A、B)などの互換性の問題を回避することもできます。実際、古いIDEAドライバーはショートカットキーがあることを知っています( Alt + Insert)エンティティクラスを直接生成する getter / setter / toString / constructorなどの メソッドはlombokよりも時間がかかりません。

 

2. Aオブジェクトで使用する必要のあるプロパティのgetterメソッドを呼び出し、Bオブジェクトに対応するsetterメソッドを同じ名前のBオブジェクトのプロパティに1つずつ割り当てます。

 

3.ロジックを変更します。特定の動作原理と例については、この大物(複製)のリンクを確認できます

https://www.jianshu.com/p/357b55852efc

おすすめ

転載: blog.csdn.net/weixin_42585386/article/details/112790028