Comment Spring 2.5 mappe-t-il les données de la demande entrante à la commande ModelAttribute?
-
03-07-2019 - |
Question
J’ai utilisé Spring 2.0 et maintenant, j’utilise Spring 2.5 Naturellement, Spring 2.5 a rendu la vie beaucoup plus facile en ce qui concerne les contrôleurs Web. La question me revient constamment à l'esprit qu'en 2.0, nous devions définir la classe de commande et donc AbstractFormController utilisé pour renseigner cet objet de commande pour nous. Au printemps 2.5, nous ne le faisons pas. Comment savoir quelle classe utiliser? Cela dépend-il du type de paramètre que nous avons annoté @ModelAttribute ("commande") à?
Si vous avez répondu «oui», merci de me le faire savoir. classe qui fournit le mécanisme exact dans lequel je peux passer HttpRequest et le nom de la classe (ou objet Class) et qui me renverrait l'objet rempli!
J'espère que vous avez ma question.
Merci d'avance.
La solution
La liaison d'annotations Web MVC repose finalement sur un
org.springframework.beans.AbstractPropertyAccessor
qui a deux implémentations concrètes:
org.springframework.beans.BeanWrapperImpl org.springframework.beans.DirectFieldAccessor
Les deux acceptent un objet Java, qui sera la cible pour définir les propriétés.
Le premier, BeanWrapperImpl utilise les méthodes setter / getter d’un objet java, tandis que l’autre définit les champs directement. Les deux vérifient que les méthodes / champs sont publics / accessibles et, dans le cas contraire, utilisez setAccessible (true) de reflection pour vous assurer qu'il peut être défini.
A partir du Web MVC, une instance de AbstractPropertyAccessor est créée et la mappe de paramètres d'une requête HttpRequest est transmise à AbstractPropertyAccessor # setPropertyValues.
Après l'appel, l'objet Java est rempli avec tout ce qui se trouve sur la carte