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