Werte der Überlappung von @PathVariable und @ModelAttribute

9

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:

  1. Ändern Sie @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).
  2. Ändern Sie @PathVariable("id") type von Long in Int. Dies macht User.id und id Typen unterschiedlich, aber die Besetzung zu Long sieht hässlich aus:)
  3. Verwenden Sie nicht @ModelAttribute hier und fragen Sie den DB erneut nach User ab. Nicht konsistent mit anderen Methoden und beinhaltet redundante DB-Aufrufe.

Irgendwelche Vorschläge?

    
Ulises 23.07.2012, 19:09
quelle

2 Antworten

5

Wie wäre es mit diesem Ansatz -

%Vor%     
Biju Kunjummen 24.07.2012, 00:04
quelle
0

Verwenden Sie @SessionAttribute

%Vor%     
psy 10.01.2018 11:49
quelle

Tags und Links