當僅顯示Spring MVC模型bean的一部分時,是否有一種方法只在模型中更新從瀏覽器返回的內容?Spring MVC + Hibernate:從瀏覽器中更新部分模型
比方說,我們有一個用戶類(公共屬性只有在這個例子中,當然):
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
現在我作爲一個JSP輸入字段顯示前三個屬性和要更新的對象相應的數據庫。只有這3個參數應該更新,而不是第四個參數。一種方法來完成這將是
@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對象返回到請求中,並且這樣做會打開很多安全漏洞。
我錯過了一個很好的功能在春天還是有任何其他方式來概念上解決這個問題?任何提示都非常感謝!
我暫時做了這樣的事情;我在字段上使用自定義註釋來引導它們是否被更新,然後解析它們以得到一個ignoreProperties列表。它運作良好,但我想避免手動定義。感謝您的輸入! – usimon