Todas las implementaciones de HandlerMapping admiten interceptores de controladores, que son útiles si necesita aplicar una funcionalidad específica a solicitudes específicas, por ejemplo, verificar la presencia de una solicitud principal. Los interceptores deben implementar HandlerInterceptor del paquete org.springframework.web.servlet con tres métodos que deberían proporcionar suficiente flexibilidad para realizar todo tipo de procesamiento previo y posterior:

  • preHandle(..): antes de que se ejecute el controlador real

  • postHandle(..): después de ejecutar el controlador

  • afterCompletion(..): después de completar la solicitud

El método preHandle(..) devuelve un valor booleano. Este método se puede utilizar para interrumpir o continuar el procesamiento de la cadena de ejecución. Si este método devuelve true, la cadena de ejecución del controlador continúa. Si devuelve false, DispatcherServlet asume que el interceptor mismo ha procesado las solicitudes (y, por ejemplo, ha representado la vista correspondiente) y no continúa ejecutando otros interceptores ni el controlador real en la cadena de ejecución.

También puede registrarlos directamente usando configuradores en implementaciones HandlerMapping separadas.

El método postHandle es menos útil cuando se utilizan métodos marcados con la anotación @ResponseBody y los métodos ResponseEntity para los cuales se escribe y captura el mensaje. dentro de HandlerAdapter y antes de postHandle. Esto significa que será demasiado tarde para realizar cambios en el mensaje, como agregar un encabezado adicional. Para tales escenarios, puede implementar ResponseBodyAdvice y declararlo como un bean controlador Advice o configurarlo directamente para RequestMappingHandlerAdapter.