在一个特定的时间内完成这项任务
Filter
之后
这个
FilterChain#doFilter()
打电话。这个
ServletRequest
对象已存在。在要优雅地抑制此异常的业务代码中,将异常存储为请求属性,并让
从请求中检查/获取它。
:根据评论,下面是一个示例:
public class Context {
private static ThreadLocal<Context> instance = new ThreadLocal<Context>();
private HttpServletRequest request;
private List<Exception> exceptions = new ArrayList<Exception>();
private Context(HttpServletRequest request) {
this.request = request;
this.request.setAttribute("exceptions", exceptions);
}
public static Context getCurrentInstance() {
return instance.get();
}
public static Context newInstance(HttpServletRequest request) {
Context context = new Context(request);
instance.set(context);
return context;
}
public void release() {
instance.remove();
}
public void addException(Exception exception) {
exceptions.add(exception);
}
}
下面是如何在控制器servlet中使用它:
Context context = Context.newInstance(request);
try {
executeBusinessCode();
} finally {
context.release();
}
下面是如何在执行的业务代码中使用它:
} catch (Exception e) {
Context.getCurrentInstance().addException(e);
}