back to top

Web – I controller – Guida Java Spring

Come detto nel paragrafo precendente i controller si occupano di servire le richieste che vengono fornite dalla DispatchServlet. Per indicare quali richieste devono essere inoltrate ai propri metodi in ogni controller ci sono una serie di @RequestMapping. Oltre a definire il path per il quale deve essere invocato un determinato metodo, si può definire l'HTTP method per il quale eseguire la richiesta (POST, GET):

@RequestMapping(value = "/", method = RequestMethod.GET)
public String welcome(Model model) {
  model.addAttribute(b);
  return "/book/createBook";
}

Se non viene speficifata una @RequestMapping a livello di classe tutti i path specificati saranno considerati assoluti, invece se tale annotation viene specificata tutti i path saranno considerati relativi, ad esempio per:

@Controller
public class ExampleController {

  @RequestMapping(value = "/")
  public String welcome(Model model) {
    model.addAttribute(new Book());
    return "/book/createBook";
  }
}

il path per il quale verrà invocato il metodo è http://…./{dispatcherServlet mapping}/, invece per

@Controller
@RequestMapping(value = "/book")
public class ExampleController {

  @RequestMapping(value = "/")
  public String welcome(Model model) {
    model.addAttribute(new Book());
    return "/book/createBook";
  }
}

il path per il quale verrà invocato il metodo è http://…./{dispatcherServlet mapping}/book/.

Il path espresso attraverso il @RequestMapping può essere anche scritto in questa forma

/path/{param}

dove param può assumere un valore determinato dinamicamente. I path di questo tipo vengono chiamati URI Templates e vengono, generalmente, utilizzati per creare servizi Rest. Si lascia al lettore un eventuale approfondimento sull’argomento.

Ogni metodo del controller annotato con @RequestMapping può avere una firma molto variabile, vediamo i principali parametri di input:

  • Request e Response delle API Servlet come HttpServletRequest.
  • HttpSession per accedere alla sessione.
  • org.springframework.web.context.request.WebRequest, un modo alternativo per accedere ai parametri della request.
  • Parametri annotati con @PathVariable per i @RequestMapping con path del tipo /path/{param}
  • Parametri annotati con @RequestParam, il cui valore viene preso dalla request.
  • Parametri che vengono esposti poi alla view: Model, Map, e ModelMap. Settando parametri in questi oggetti vengo aggiunti come attributi alla request, e quindi visualizzabili, per esempio, in una jsp.
  • Errors e BindingResult per la validazione di form.

Anche i valori di ritono dei metodi sono variabili ma, per semplicità espositiva, nei nostri esempi useremo solo il tipo String.

@Controller
@RequestMapping("example")
public class FullController {

  @RequestMapping("m1")
  public String m1(HttpServletRequest request, HttpServletResponse response){
    //business logic
    return "/path";
  }

  @RequestMapping("m2")
  public String m2(HttpSession session){
    //business logic
    return "/path";
  }

  @RequestMapping("m3")
  public String m3(WebRequest request){
    //business logic
    return "/path";
  }

  @RequestMapping("m4/{param}")
  public String m4(@PathVariable String param){
    //business logic
    return "/path";
  }

  @RequestMapping("m5")
  public String m5(Model model, BindingResult result){
    //business logic
    return "/path";
  }
}
Pubblicitร