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 PathPattern para 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.