Quando si visualizza solo una parte di un bean di modello Spring MVC, esiste un modo per aggiornare solo nel modello cosa viene restituito dal browser?Spring MVC + Hibernate: aggiornamento parziale del modello dal browser
Diciamo che abbiamo una classe utente (proprietà pubbliche solo in questo esempio, ovviamente):
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
Adesso visualizzare le prime tre proprietà come campi di input in un JSP e desidera aggiornare l'oggetto in il database di conseguenza. Solo questi 3 parametri dovrebbero essere aggiornati, NON il quarto. Un modo per ottenere questo risultato sarebbe
@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);
}
ma questo significherebbe hardcoding tutte le proprietà che potrebbero cambiare, che non mi piacciono troppo.
Esiste un modo per determinare quali campi aggiornare in base a ciò che l'utente è stato autorizzato a modificare? Questo meccanismo dovrebbe essere più intelligente del semplice presupposto che tutto ciò che è nei parametri della richiesta possa essere modificato, altrimenti qualsiasi utente esperto potrebbe inserire manualmente campi aggiuntivi in una richiesta.
L'utilizzo di @Entity (dynamicUpdate = true) non risolve il problema ai miei occhi, poiché non riesco a recuperare l'intero oggetto Utente nella richiesta, e così facendo si aprono molte falle nella sicurezza.
Mi manca una bella funzionalità in primavera o esiste un altro modo per risolvere concettualmente questo problema? Ogni suggerimento è molto apprezzato!
Per ora ho fatto qualcosa del genere; Sto usando annotazioni personalizzate sui campi per controllare se verranno aggiornati e quindi analizzandoli per ottenere un elenco di ignoreProperties. Funziona bene, ma mi piacerebbe evitare di definirlo manualmente. Grazie per l'input però! – usimon