Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Signature degli handler, parametri e valori di ritorno

Link copiato negli appunti

La signature degli handler

L'ultima caratteristica vincente dei Controller di Spring MVC riguarda la possibilità di
personalizzare a proprio piacimento la signature del metodo (ovvero il numero e il tipo di parametri accettati e il tipo di dato ritornato). Questa funzionalità ci permette di avere una libertà impensabile all'interno di una applicazione J2EE.

Come abbiamo visto in precedenza abbiamo creato metodi che non accettavano parametri, metodi
che accettavano una String e metodi che accettavano un int. Il motore interno di Spring MVC identifica quali parametri il nostro metodo richiede e, se possibile, ce li fornisce senza preoccupazioni da parte nostra. Lo stesso approccio è valido per il valore ritornato dal metodo stesso. In seguito vedremo come personalizzare anche questo
aspetto.

Parametri possibili

Ecco un elenco dei principali parametri disponibili:

  • Parametri annotati con @PathVariable recuperati dal pattern.
  • Parametri annotati con @RequestParam ed inviati via HTTP dal client.
  • HttpServletRequest e HttpServletResponse (e anche ServletRequest e ServletResponse) per accedere direttamente agli oggetti nativi J2EE.
  • HttpSession per sfruttare la sessione senza doverla recuperare manualmente dalla request.
  • Locale per identificare automaticamente il locale utilizzato.
  • InputStream e OutputStream per lavorare a basso livello direttamente sugli stream in ingresso e in uscita.
  • Parametri annotati con @RequestHeader per avere un determinato valore tra gli header HTTP ricevuti.
  • Parametri annotati con @RequestBody per avere direttamente il corpo della request.
  • Map (o Model) per passare alla view valori dinamici.
  • Errors (o BindingResult) per gestire la validazione dei form.

Tutto questo significa che avere delle signature di questo tipo non solo è possibile, ma è anche
raccomandabile:

public void withSession(HttpSession session) {
	// TODO...
}
public void withResponseRequest(HttpServletRequest request, HttpServletResponse response) {
	// TODO...
}
public void withLocale(Locale locale) {
	// TODO...
}

Non bisognerà preoccuparsi di come recuperare questi oggetti, basterà inserirli nella signature del metodo e diverranno disponibili.

Valori di ritorno

Cosi come per i parametri in ingresso, è possibile modificare a proprio piacimento il valore ritornato dai nostri handler, seppur con minore variabilità.

Tra i valori possibili è utile ricordare:

  • void per comunicare a Spring MVC che l'intera gestione del flusso di response verrà gestita manualmente;
  • una stringa per invocare un ViewResolver che a partire da essa recupererà una particolare vista (JSP per esempio) da utilizzare;
  • una stringa con prefisso redirect: per forzare una redirect verso un'altra url;
  • una stringa con prefisso forward: per forzare il forward verso un altro handler;
  • un ModelAndView (o un Model) che incapsulano sia il nome della vista da caricare sia l'insieme dei dati da passare ad essa;
  • qualsiasi tipo di oggetto da convertire tramite un HttpMessageConverter (per esempio in JSON o XML) se il metodo è annotato con @ResponseBody.

Ti consigliamo anche