我有一個 Spring 應用程式,我想將用戶操作記錄到資料庫表中。例如,如果用戶呼叫了 POST createBook API,那么我想將此創建操作記錄到表中。
我打算使用 SpringHandlerInterceptorAdapter并覆寫該afterCompletion方法。
我的問題:
如果API內部拋出例外,該
afterCompletion方法是否也會被呼叫?只有在沒有拋出例外并且它是成功回應的情況下,有什么方法可以攔截。我只想攔截一些特定的 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
}
}
}
uj5u.com熱心網友回復:
您可以在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");
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467293.html
