Как я могу использовать несколько перехватчиков для конкретного запроса, такого как POST, Get и PUT? - PullRequest
0 голосов
/ 25 октября 2019

Я использую весеннюю загрузку и облако в проекте. Для ведения журнала я использую перехватчики. Поскольку я новичок в перехватчиках, у меня возникают трудности с использованием нескольких перехватчиков. Как я могу использовать определенный перехватчик для конкретной задачи? Например, когда я запрашиваю сообщение, вызывается перехватчик POST, когда я использую GET, вызывается перехватчик get. и как я могу кодировать для нескольких перехватчиков тоже?

Я еще ничего не пробовал для этого, потому что я не понимаю логику

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

@ earandap

Ваш комментарий сработал Спасибо большое. Вот мой код:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {

    long startTime = System.currentTimeMillis();

    request.setAttribute("startTime", startTime);

    log.info("[START]  [" + request.getMethod() + "] [ URL is: " + request.getRequestURL().toString()
            + " Body is: {}]");

    return true;

}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {

    long startTime = (long) request.getAttribute("startTime");
    request.removeAttribute("startTime");
    long endTime = System.currentTimeMillis();
    log.info("[END]  [" + request.getMethod() + "]   [ URL is:" + request.getRequestURL().toString()
            + "]  [Execution Time: {} miliseconds]", (endTime - startTime));
}
0 голосов
/ 25 октября 2019

Вы можете определить все HTTP-перехватчики, которые вы хотите, каждый перехватчик должен реализовывать логику перехвата HTTP-запроса.

@Slf4j
@Component
public class GetRequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if (request.getMethod().equals(HttpMethod.GET.name())) {
            log.info("intercepting GET request {}", request.getRequestURI());

        }

        return true;
    }
}


@Slf4j
@Component
public class PostRequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if (request.getMethod().equals(HttpMethod.POST.name())) {
            log.info("intercepting POST request {}", request.getRequestURI());
        }

        return true;
    }
}

А затем вам нужно зарегистрировать их весной.

@RequiredArgsConstructor
@Configuration
public class WebConfigurer implements WebMvcConfigurer {

    private final GetRequestInterceptor getInterceptor;
    private final PostRequestInterceptor postRequestInterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getInterceptor);
        registry.addInterceptor(postRequestInterceptor);
    }

}
...