Ich habe ein User
-Objekt in der Sitzung mit @SessionAttributes
gespeichert. Und eine unkomplizierte Methode, die mit @ModelAttribute
versehen ist, um sie zu initialisieren, wenn der Wert der Sitzung null ist.
Benutzerklasse:
%Vor%Controller:
%Vor%@ModelAttribute-Methode:
%Vor%Es scheint alles zu funktionieren, außer in dieser speziellen Methode:
%Vor% Das Problem ist, dass User.id
mit @PathVariable("id")
gesetzt wird. Ich glaube, dass ich auch mit @RequestParam
darauf gestoßen bin. Ich gehe davon aus, dass beide den gleichen Namen und Typ haben. Nach dem Lesen von Spring-Dokumentation (siehe unten) Ich gehe davon aus, dass dies erwartetes Verhalten ist:
Der nächste Schritt ist die Datenbindung. Die WebDataBinder-Klasse vergleicht die Namen von Anforderungsparametern - einschließlich Abfragezeichenfolgenparametern und Formularfeldern -, um Attributfelder nach ihrem Namen zu modellieren. Übereinstimmende Felder werden gefüllt, nachdem die Typkonvertierung (von String zum Zielfeldtyp) angewendet wurde, falls erforderlich.
Ich denke jedoch, dass dieses Szenario relativ häufig ist, wie gehen andere Leute damit um? Wenn meine Ergebnisse korrekt sind und dies erwartetes Verhalten (oder Bug) ist, scheint dies sehr fehleranfällig zu sein.
Mögliche Lösungen:
@PathVariable("id")
in @PathVariable("somethingElse")
. Works, aber es ist nicht so einfach mit @RequestParam (z. B. ich weiß nicht, wie jqgrid Request-Parameter-ID zu etwas anderem ändern, aber das ist ein anderes Problem). @PathVariable("id")
type von Long in Int. Dies macht User.id
und id
Typen unterschiedlich, aber die Besetzung zu Long sieht hässlich aus:) @ModelAttribute
hier und fragen Sie den DB erneut nach User
ab. Nicht konsistent mit anderen Methoden und beinhaltet redundante DB-Aufrufe. Irgendwelche Vorschläge?
Tags und Links spring spring-mvc