Spring MVC + Hibernate: частичное обновление модели из браузера
При отображении только части бина модели Spring MVC, есть ли способ обновить только то, что возвращается из браузера?
Позволять'скажем, у нас есть класс User (общедоступные свойства, конечно, только в этом примере):
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);
}
но это будет означать жесткое кодирование всех свойств, которые могут измениться, что я нене очень нравится
Есть ли способ определить, какие поля обновлять, основываясь на том, что пользователю было разрешено изменять? Этот механизм должен быть умнее, чем просто предполагать, что все, чтоs в параметрах запроса могут быть изменены, в противном случае любой опытный пользователь может вручную добавить дополнительные поля в запрос.
Использование @Entity (dynamicUpdate = true) также не решает проблему, так как яЯ не получаю весь объект User обратно в запросе, и это откроет много дыр в безопасности.
Я упускаю хорошую функцию в Spring или есть какой-то другой способ концептуального решения этой проблемы? Любые советы приветствуются!