Il metodo del mio controller restituisce un ModelAndView
, ma è anche necessario scrivere un cookie sul client. È possibile farlo in primavera? Grazie.In primavera mvc 3, come scrivere un cookie mentre si restituisce un ModelAndView?
risposta
Se si aggiunge la risposta come parametro per il vostro metodo del gestore (vedi flexible signatures of @RequestMapping
annotated methods - stessa sezione per 3.2.x, 4.0.x, 4.1.x, 4.3.x, 5.0.x), si può add the cookie alla risposta diretta:
Kotlin
@RequestMapping(["/example"])
fun exampleHandler(response: HttpServletResponse): ModelAndView {
response.addCookie(Cookie("COOKIENAME", "The cookie's value"))
return ModelAndView("viewname")
}
Java
@RequestMapping("/example")
private ModelAndView exampleHandler(HttpServletResponse response) {
response.addCookie(new Cookie("COOKIENAME", "The cookie's value"));
return new ModelAndView("viewname");
}
non come parte del ModelAndView
, no, ma è possibile add the cookie directly all'oggetto HttpServletResponse
che è passato al tuo metodo di controllo.
Puoi scrivere un HandlerInterceptor
che prenderà tutte le istanze di Cookie dal tuo modello e genererà le intestazioni dei cookie appropriate. In questo modo è possibile mantenere i controller puliti e liberi da HttpServletResponse
.
@Component
public class ModelCookieInterceptor extends HandlerInterceptorAdapter {
@Override
public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler, ModelAndView modelAndView) throws Exception {
if (modelAndView != null) {
for (Object value : modelAndView.getModel().values()) {
if (value instanceof Cookie)
res.addCookie((Cookie) value);
}
}
}
}
NB. Non dimenticare di registrare l'intercettore con <mvc:interceptors>
(config XML) o WebMvcConfigurer.addInterceptors()
(configurazione Java).
soluzione RustyX in Java 8:
@Component
public class ModelCookieInterceptor extends HandlerInterceptorAdapter {
@Override
public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler, ModelAndView modelAndView) throws Exception{
if (modelAndView != null) {
modelAndView.getModel().values().stream()
.filter(c -> c instanceof Cookie)
.map(c -> (Cookie) c)
.forEach(res::addCookie);
}
}
}
- 1. Quando utilizzare ModelAndView vs Model in primavera?
- 2. Come implementare l'impaginazione in primavera MVC 3
- 3. come ottenere getServletContext() in primavera controller mvc
- 4. java - ottieni il valore del cookie per nome in primavera mvc
- 5. Impossibile scrivere un file mentre si utilizza Tomcat
- 6. Modulo di invio in primavera MVC 3 - spiegazione
- 7. Spring 3 MVC Nesting RequestMapping
- 8. Come generare URI all'interno di un controller in primavera 3
- 9. Oggetti predefiniti in primavera 3 mvc SessionAttributes in caso di sessione scaduta
- 10. Come si associa a un elenco come una proprietà su un modello in Rasoio MVC 3?
- 11. Come memorizzare un array in un cookie?
- 12. Come posso creare un cluster in un'applicazione mvc di primavera?
- 13. Caricamento file in primavera 3 MVC - Eccezione puntatore nullo
- 14. Come eliminare manualmente un cookie in asp.net MVC 4
- 15. restituisce un partial in un messaggio flash in Rails 3
- 16. Restituisce il controller della stessa vista utilizzando ModelAndView di Spring Web MVC
- 17. interceptor mvc di primavera: accesso a ResponseEntity in postHandle
- 18. Come scrivere un filtro personalizzato nella sicurezza di primavera?
- 19. Campo nascosto in primavera MVC
- 20. come aprire un file PDF mentre si restituisce il file in AJAX richiesta risposta positiva
- 21. ASP MVC 3 cookie di perdere HttpOnly e bandiere Sicuro
- 22. Scrivere un plugin jQuery che restituisce valori
- 23. Come configurare primavera RestTemplate con SSL (in primavera @MVC)
- 24. Richiesto RequestMapping in primavera MVC
- 25. Come ricoautenticare un utente in un'applicazione _Intranet_ ASP.Net MVC 3?
- 26. primavera MongoDB scrivere-preoccupazione Valori
- 27. Come pubblicare un array di file in ASP.NET MVC 3?
- 28. riferimento a un file .css con thymeleaf in mvc primavera
- 29. Cookie in ASP.Net MVC 5
- 30. Perché jQuery restituisce un indice di 3?
A volte è necessario chiamare 'cookie.setPath ("xxx");' se si desidera condividere il cookie tra le richieste. –