[英]Adding interceptor for success API response
我有一個 Spring 應用程序,我想在其中將用戶操作記錄到數據庫表中。 例如,如果用戶調用了 POST createBook API,那么我想將此創建操作記錄到一個表中。
我打算使用 Spring HandlerInterceptorAdapter
並覆蓋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
}
}
}
您可以在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.