Interceptors
public class PostHookInterceptor implements HandlerInterceptor {
private static final String PATH_VARIABLES_ATTRIBUTE = "org.springframework.web.servlet.View.pathVariables";
private final List<RequestPostHook> postHooks;
private final ObjectMapper objectMapper;
@Override
public void postHandle(@NotNull HttpServletRequest request,
@NotNull HttpServletResponse response,
@NotNull Object handler,
ModelAndView modelAndView) throws Exception {
try {
var method = request.getMethod();
var path = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
for (RequestPostHook<Object> postHook : postHooks) {
try {
if (postHook.isTargetEndpoint(method, path)) {
var pathVariables = (Map<String, String>) request.getAttribute(PATH_VARIABLES_ATTRIBUTE);
var payload = objectMapper.readValue(request.getReader(), postHook.getPayloadType());
postHook.process(pathVariables, payload);
}
} catch (Exception e) {
log.error("Error during processing Post Hook '{}': {}", postHook.getClass().getSimpleName(), e.getMessage(), e);
}
}
} catch (Exception e) {
log.error("Error during processing Post Hooks: {}", e.getMessage(), e);
}
}
}Last updated