Comparación Entre Pathpattern Y Antpathmatcher
Comparación entre PathPattern y AntPathMatcher en Spring MVC
🌍 Introducción
Spring MVC permite mapear rutas (URL paths) a métodos de controladores usando patrones. Históricamente, esto se hacía con AntPathMatcher, pero a partir de Spring 5.3 (y por defecto en Spring 6.0), se recomienda usar PathPattern, una solución moderna, más eficiente y segura.
🔹 Segmentos de Ruta
Una ruta está compuesta por segmentos separados por /.
Ejemplo de URL:
/files/docs/java/intro.pdf
Segmentos:
1 → files
2 → docs
3 → java
4 → intro.pdf
🔢 Ejemplos de Patrones
AntPathMatcher
@RequestMapping("/files/**")
public void handle(HttpServletRequest request) {
String fullPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
AntPathMatcher apm = new AntPathMatcher();
String remainingPath = apm.extractPathWithinPattern(bestMatchPattern, fullPath);
System.out.println("Path capturado: " + remainingPath);
}
PathPattern
@RequestMapping("/files/{*path}")
public void handle(@PathVariable String path) {
System.out.println("Path capturado: " + path);
}
🔄 Comparación
| URL | Patrón /files/** (AntPathMatcher) |
Patrón /files/{*path} (PathPattern) |
Variable capturada |
|---|---|---|---|
/files/docs |
✅ | ✅ | "docs" |
/files/docs/java |
✅ | ✅ | "docs/java" |
/files/docs/java/intro.pdf |
✅ | ✅ | "docs/java/intro.pdf" |
🔗 Diferencias Clave
| Característica | AntPathMatcher | PathPattern |
|---|---|---|
| Coincidencia de múltiples segmentos | ✅ /files/** |
✅ /files/{*path} |
| Captura de segmentos como variable | ❌ (se requiere lógica extra) | ✅ (@PathVariable) |
| Manejo de rutas codificadas | ❌ | ✅ |
| Recomendado desde Spring 6.0 | ❌ | ✅ (por defecto) |
📅 Activar PathPattern manualmente (si usas Spring 5.3)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setPatternParser(new PathPatternParser());
}
}
📍 Conclusión
- Usa
PathPatternpara nuevas aplicaciones. - Permite capturar rutas completas como variables con
{*path}. - Mejora el rendimiento y la precisión.
- Reemplaza el uso de
AntPathMatcher, que es más propenso a errores y requiere más código adicional.