2013-10-31 5 views
6

Mein vorhandenen Code ist wie:Kann ein Spring MVC Controller sowohl eine HttpServletResponse als auch eine View zurückgeben?

String myController(@PathVariable someId, ModelMap map){ 
.... 
return "myViewName"; 
} 

Jetzt ein Cookie in einigen Fällen setzen ich will, so muss ich halten einen HttpServletResponse obj bekommen. Kann ich einfach ein solches Antwortobjekt zur Liste der Parameter hinzufügen und in der Steuerung bearbeiten? Wenn ja, frage ich mich, wie meine eigene Antwort mit der von der JSP erzeugten Antwort, die den "myViewName" auflöst, in Einklang gebracht wird.

Antwort

9

Ja.

@RequestMapping 
public String myController(@PathVariable someId, ModelMap map, HttpServletResponse response) { 
    // Do what you need to do on the response, like set a cookie 
    return "myViewName"; 
} 
0

Ihre andere Frage zu „‚‘wie meine eigene Antwort Art mit der Antwort von der JSP erzeugte in Einklang gebracht, die das löst“ myViewName

Wenn Sie eine Ansicht "myViewName" zurückgeben, wird sie in eine bestimmte Ressource (JSP-Ansicht oder JSON-Ansicht oder eine andere Ansicht) aufgelöst. Sobald diese Ansichtsressource erhalten wird, abhängig davon, was Sie zurückgeben, führt diese Ansicht das Rendern für die Antwort durch. Dieses Antwortobjekt ist das gleiche, das an die Controller-Funktion (myController) übergeben wurde. Wenn Sie zum Beispiel einige Cookies/Header für die Antwort in der Controller-Funktion festlegen, hat die Antwort, die von der Ansicht zum Rendern verwendet wird, dieselben Eigenschaften.

Falls Sie mit dem eigentlichen Rendering/Antwort selbst arbeiten wollen, können Sie immer den Ausgabestrom der Antwort erhalten und darauf schreiben und den Stream schließen. Dann wird die Ansicht, die Sie zurückgeben, ignoriert, da der Dispatcher überprüft, ob die Antwort bereits bearbeitet wurde, und nur die Post-Punkte verarbeiten.

Hoffe, dass für jeden auf der Suche nach der Dispatcher-Logik hinter ihm aufklärt.

Verwandte Themen