In Spring MVC ist es einfach, die Anforderung Parameter an Methodenparameter zu binden, die die Anforderung verarbeiten. Ich benutze einfach @RequestParameter("name")
. Aber kann ich das gleiche mit der Anfrage Attribut tun? Derzeit wenn ich Anfrage Attribut zugreifen will, muss ich folgendes tun:Spring MVC: Bindungsanforderungsattribut an Controller-Methodenparameter
MyClass obj = (MyClass) request.getAttribute("attr_name");
Aber ich möchte wirklich so etwas wie dies stattdessen verwenden:
@RequestAttribute("attr_name") MyClass obj
Leider hat es nicht arbeite so. Kann ich die Spring-Funktionalität irgendwie erweitern und eigene "Binder" hinzufügen?
EDIT(was ich versuche zu erreichen): Ich speichere derzeit Benutzer innerhalb Anforderungsattribut angemeldet. Also, wann immer ich auf den aktuell angemeldeten Benutzer zugreifen möchte (was ziemlich in jeder Methode ist), muss ich diese zusätzliche Zeile user = (User) request.getAttribute("user");
schreiben. Ich möchte es so kurz wie möglich machen, vorzugsweise als Methodenparameter einspeisen. Oder wenn Sie einen anderen Weg kennen, wie man etwas über Abfangjäger und Controller hinweggibt, würde ich mich freuen, es zu hören.
Das ist perfekt! Vielen Dank. – Raff
Wenn Ihre Parameternamen mit den Eigenschaften Ihres Modellobjekts übereinstimmen, benötigen Sie die zusätzliche getUser-Methode nicht. Mit spring werden diese Eigenschaften automatisch festgelegt. – chrismarx
Auf diese Weise wird das Benutzerobjekt in Ihrer Methode nicht nur aus dem Ansichtsmodell, sondern auch von dessen Eigenschaften abgerufen wird durch eingehende Anfrage- oder Formularparameter gebunden (und überschrieben). Wenn zum Beispiel das Benutzerobjekt eine id-Eigenschaft hat (die viele Benutzerobjekte haben) und die Anfrage-URL oder das Formular auch einen nicht verwandten id-Parameter haben, wird die ID des Benutzerobjekts überschrieben. Dies hat einmal einen bösen Fehler in meinem Code verursacht. In diesem speziellen Fall möchten Sie nicht die formalen Bindungseigenschaften von @ModelAttribute. Eine Alternative ist 'User u = (Benutzer) model.get (" user ");' – klausch