簡體   English   中英

添加成功攔截器 API 響應

[英]Adding interceptor for success API response

我有一個 Spring 應用程序,我想在其中將用戶操作記錄到數據庫表中。 例如,如果用戶調用了 POST createBook API,那么我想將此創建操作記錄到一個表中。

我打算使用 Spring HandlerInterceptorAdapter並覆蓋afterCompletion方法。

我的問題:

  1. 如果API內部拋出異常, afterCompletion方法是否也會被調用? 有什么辦法只有在沒有拋出異常並且是成功響應的情況下才攔截。

  2. 我只想攔截一些特定的 API。 除了檢查方法內部的 API 路徑之外,還有什么優雅的方法嗎?

public class OperationInterceptor extends HandlerInterceptorAdapter {
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
            Object handler, Exception ex) {
        if ("/book".equals(request.getServletPath() && "POST".equals(request.getMethod())) {
            //log the operation into db
        }

        if ("/order".equals(request.getServletPath() && "POST".equals(request.getMethod())) {
            //log the operation into db
        }
    }
}

您可以在afterCompletion方法中添加這樣的 if 條件。

if(ex!=null){
   Stream.of(
            new String[]{"/book", "POST"},
            new String[]{"/order", "GET"})
            .filter((p)-> Objects.equals(request.getServletPath(),p[0])&&Objects.equals(request.getMethod(),p[1]))
            .findAny().ifPresent(r->{
            System.out.println("//log oprations");
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM