En Spring Boot, puedes usar un enum
como parámetro de la URL mediante la anotación @PathVariable
. Esto es útil cuando necesitas restringir los valores de un parámetro a un conjunto predefinido, lo que mejora la legibilidad del código y permite manejar rutas más claras y controladas.
enum
y usarlo como @PathVariable
Primero, debes definir el enum
que quieres utilizar en el @PathVariable
de tu controlador. Luego, puedes crear un controlador REST que acepte ese enum
como parte del path de la URL. Aquí se muestra cómo hacerlo:
enum
Crea un enum
con los valores permitidos para el parámetro de la URL. Por ejemplo, supongamos que tienes un sistema que gestiona órdenes y deseas filtrar por estado de la orden:
public enum EstadoOrden {
NUEVO,
PROCESANDO,
COMPLETADO,
CANCELADO
}
enum
como parámetro
En el controlador, usa @PathVariable
para vincular el enum
con una parte del path de la URL. Spring Boot automáticamente convertirá la cadena de la URL a un valor del enum
.
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ordenes")
public class OrdenController {
@GetMapping("/{estado}")
public String obtenerOrdenesPorEstado(@PathVariable EstadoOrden estado) {
return "Obteniendo órdenes con estado: " + estado;
}
}
http://localhost:8080/ordenes/NUEVO
invocará el método obtenerOrdenesPorEstado
con el parámetro estado
establecido en EstadoOrden.NUEVO
.
enum
(por ejemplo, http://localhost:8080/ordenes/PENDIENTE
), Spring lanzará una excepción 400 Bad Request
automáticamente, ya que el valor no existe en el enum
.
Si deseas personalizar la respuesta cuando se proporciona un valor de enum
inválido, puedes implementar un manejador de excepciones para MethodArgumentTypeMismatchException
:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
@ControllerAdvice
public class EnumExceptionHandler {
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public ResponseEntity<String> handleEnumConversionError(MethodArgumentTypeMismatchException ex) {
String mensajeError = String.format("El valor '%s' no es válido para el estado de la orden. Valores permitidos: NUEVO, PROCESANDO, COMPLETADO, CANCELADO.",
ex.getValue());
return new ResponseEntity<>(mensajeError, HttpStatus.BAD_REQUEST);
}
}
enum
como @PathVariable
1. Filtrar productos por categoría:
public enum CategoriaProducto {
ELECTRONICA,
ROPA,
HOGAR,
LIBROS
}
@GetMapping("/productos/{categoria}")
public List<Producto> obtenerProductosPorCategoria(@PathVariable CategoriaProducto categoria) {
return productoService.buscarPorCategoria(categoria);
}
2. Gestión de usuarios por roles:
public enum RolUsuario {
ADMIN,
CLIENTE,
INVITADO
}
@GetMapping("/usuarios/{rol}")
public List<Usuario> obtenerUsuariosPorRol(@PathVariable RolUsuario rol) {
return usuarioService.buscarPorRol(rol);
}
Puedes obtener más información sobre cómo trabajar con @PathVariable
y enum
en la documentación oficial de Spring.
Jorge García
Fullstack developer