Spring MVCモデルBeanの一部のみを表示する場合、ブラウザから戻ってくるものをモデルで更新する方法がありますか?Spring MVC + Hibernate:ブラウザからの部分モデルの更新
のは、我々は(もちろんこの例のみでのパブリックプロパティ、)Userクラスがあるとしましょう:
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
は今、私はJSPの入力フィールドとして、最初の3つのプロパティを表示し、中のオブジェクトを更新したいですそれに応じてデータベース。これらの3つのパラメータだけが更新されるべきであり、第4のパラメータは更新されるべきではない。これを実現するための一つの方法は
@RequestMapping("/user/{userId}", method=RequestMethod.POST)
public String saveChanges(@PathVariable userId, User user, Model model) {
User oldUser = User.loadFromDB(userId);
oldUser.firstName = user.firstName;
oldUser.lastName = user.lastName;
oldUser.email = user.email;
oldUser.saveToDB();
model.addAttribute("user", oldUser);
}
だろうが、これは、私はあまり好きではありませんこれは、変更される可能性があり、すべてのプロパティをハードコーディングを意味します。
ユーザーが変更を許可された内容に基づいて、更新するフィールドを判断する方法はありますか?そのメカニズムは、要求パラメータにあるすべてのものが変更される可能性があると仮定するだけでなく、精通したユーザーが手作業で追加のフィールドを要求に挿入することができると想定するよりもスマートにすべきです。
@Entity(dynamicUpdate = true)を使用しても、私の目には問題は解決しません。ユーザーオブジェクト全体が要求に戻らないため、多くのセキュリティホールが発生します。
私は春に素敵な機能が欠けていますか、あるいは概念的にこの問題を解決する他の方法はありますか?どんなヒントも大歓迎です!
当分の間、このようなことをしました。フィールド上でカスタムアノテーションを使用して、それらが更新されるかどうかを調整し、ignorePropertiesのリストを作成するように解析しています。それはうまくいきますが、私はこれを手動で定義することを避けたいと思います。しかし、入力をありがとう! – usimon