jueves, 6 de abril de 2017

Direccionamiento y manejo de URLs en Spring Controller

En este post trataremos algo muy básico como es el direccionamiento de los controladores de Spring.

Una primera forma básica es que cada método del controlador tenga su propio direccionamiento e indiquemos la ruta completa para llegar a ellos. 


@Controller
public class RecommendController {

@GetMapping( "/recommend/user/{userId}" )
public String recommendByUser( @PathVariable Integer userId, final Model model){
//..
}

@PostMapping( "/recommend/}" )
public String save( @Valid RecommendForm form, BindingResult result) {
//.. }

Pero lo normal es que los métodos del controlador compartan la ruta del mismo. Para poder hacer esto debemos poner la anotación '@RequestMapping' a nivel del controlador. Así le indicaremos que todas las rutas de los métodos del controlador son relativas y tienen como raíz la ruta indicada en la anotación. @Valid AppointmentForm appointment, BindingResult result


@Controller
@RequestMapping( "/recommend" )
public class RecommendController {

@GetMapping( "/user/{userId}" )
public String recommendByUser( @PathVariable Integer userId, final Model model){
//..
}

@PostMapping( "/" )
public String save( @Valid RecommendForm form, BindingResult result) {
//..
}

En ambos ejemplos podemos ver el uso de la anotación '@PathVariable' lo que nos lleva a otra utilidad que nos permite realizar el direccionamientos de los controladores de forma más dinámica y útil. A esta propiedad/habilidad se le conoce como 'URI Template Patterns'.

Con dicha variable podemos realizar que las URLs no sean estáticas sino que permitan acceder a determinados métodos en base a patrones asociados a las rutas de acceso de los mismos. Como es en los casos de arriba variables, por ejemplo la siguiente ruta nos redirigiría al método 'recommendByUser': /recommend/user/3.

URI Template Patterns también permite el uso dentro de la anotación 'RequestMapping' o el uso de expresiones regulares como: '/recommend/user/{userId:\\d}' o '/recommend/*/users/{userId}'.

No hay comentarios:

Publicar un comentario