Spring MVC. Mapeo de peticiones.

Versión para imprimirVersión PDF

Anteriormente hemos visto la forma básica para generar controladores basados en anotaciones, hoy revisaremos las opciones que tenemos para realizar el mapeo de peticiones hacia los métodos de nuestros controladores.

Establecer ruta base
Tenemos la posibilidad de establecer la ruta base de la peticiones que atenderá nuestro controlador al combinar el uso de la anotación org.springframework.web.bind.annotation.RequestMapping a nivel clase y método de la siguiente manera.

@Controller("userController")
@RequestMapping("/admin/user/*")
public class UserController {
  
  @RequestMapping(value = "list.htm")
  public ModelAndView list() {
    ...
  }
  
  ...
}

El código anterior indica que el método list() de la clase UserController atenderá las peticiones realizadas a la URL /admin/user/list.htm

Método de la petición
También se puede filtrar el mapeo de las peticiones a través del método de la petición.

@Controller("userController")
@RequestMapping("/admin/user/*")
public class UserController {
  
  @RequestMapping(value = "filteredList.htm", method = RequestMethod.GET)
  public ModelAndView filterForm() {
    ...
  }
  
  @RequestMapping(value = "filteredList.htm", method = RequestMethod.POST)
  public ModelAndView filteredList() {
    ...
  }
  
  ...
}

En este ejemplo la misma URL /admin/user/filteredList.htm es mapeada hacia 2 métodos del controlador, filterForm() atiende las peticiones de tipo GET (por ejemplo un enlace para mostrar el formulario de filtrado) y filteredList() atiende las peticiones de tipo POST (para enviar el formulario con los filtros y mostrar la lista).

Parámetros en la petición
Otra de las opciones es realizar el mapeo de acuerdo a los parámetros recibidos (o no) dentro de la petición.

@Controller("userController")
@RequestMapping("/admin/user/*")
public class UserController {
  
  @RequestMapping(value = "update.htm", method = RequestMethod.GET, params = {"create"})
  public ModelAndView create() {
    ...
  }
  
  @RequestMapping(value = "update.htm", method = RequestMethod.GET, params = {"!create"})
  public ModelAndView update(@RequestParam("login") String login) {
    ...
  }
  
  ...
}

Los métodos create() y update() son mapeados a las peticiones de /admin/user/update.htm de tipo GET. Sin embargo el método create atenderá aquellas peticiones en las que el parámetro de petición create esté presente y el método update atenderá las peticiones cuando el mismo parámetro esté ausente.

Headers de la petición
Finalmente, podemos mapear las peticiones de acuerdo a las cabeceras de la petición.

@Controller("userController")
@RequestMapping("/admin/user/*")
public class UserController {
  
  @RequestMapping(value = "home.htm", header = "content-type=text/*")
  public ModelAndView home() {
    ...
  }
  
  ...
}

También se puede usar el símbolo ! de negación.

Your rating: None Average: 5 (2 votes)