Spring MVC モデル Bean の一部のみを表示する場合、ブラウザから返されたモデルのみを更新する方法はありますか?
User クラスがあるとしましょう (もちろん、この例ではパブリック プロパティのみです)。
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
ここで、最初の 3 つのプロパティを JSP の入力フィールドとして表示し、それに応じてデータベース内のオブジェクトを更新したいと考えています。これら 3 つのパラメーターのみを更新する必要があります。4 番目のパラメーターは更新しないでください。これを達成する1つの方法は、
@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) を使用しても、リクエストで User オブジェクト全体を取得できず、多くのセキュリティ ホールが開くため、問題は解決しません。
Spring の優れた機能が不足していますか、またはこの問題を概念的に解決する他の方法はありますか? どんなヒントでも大歓迎です!