In che modo Spring 2.5 associa i dati della richiesta in arrivo al comando ModelAttribute?
-
03-07-2019 - |
Domanda
Ho usato Spring 2.0 e ora sto usando Spring 2.5 Natualmente, Spring 2.5 ha reso la vita molto facile per quanto riguarda i controller Web. Mi viene in mente la domanda che nel 2.0 abbiamo dovuto impostare la classe di comando e di conseguenza AbstractFormController ha usato per popolare quell'oggetto comando per noi. Nella primavera 2.5 non lo facciamo, quindi come viene a sapere quale classe utilizzare? Dipende dal tipo di parametro in cui abbiamo annotato @ModelAttribute (" command ") in?
In caso affermativo, per favore fatemi sapere qualsiasi " Utilità " classe che fornisce l'esatto meccanismo in cui posso passare HttpRequest e nome classe (o oggetto Class) e che mi restituirebbe l'oggetto popolato!
Spero che tu abbia la mia domanda.
Grazie in anticipo.
Soluzione
Il binding delle annotazioni Web MVC alla fine si basa su un
org.springframework.beans.AbstractPropertyAccessor
che ha due implementazioni concrete:
org.springframework.beans.BeanWrapperImpl org.springframework.beans.DirectFieldAccessor
Entrambi accettano un oggetto Java, che sarà la destinazione per cui impostare le proprietà.
Il primo, BeanWrapperImpl utilizza i metodi setter / getter di un oggetto java, mentre l'altro imposta direttamente i campi. Entrambi verificano che i metodi / campi siano pubblici / accessibili e, in caso contrario, utilizzano il setAccessible (true) di reflection per assicurarsi che possa essere impostato.
Dal Web MVC, viene creata un'istanza di AbstractPropertyAccessor e la mappa dei parametri di un HttpRequest viene passata a AbstractPropertyAccessor # setPropertyValues.
Dopo la chiamata, l'oggetto java viene popolato con tutto ciò che si trova nella mappa