spring 拦截器获取返回的结果
时间: 2023-09-25 14:12:32 浏览: 109
在 Spring 中,我们可以使用拦截器来对请求进行处理和过滤,但是拦截器并不能直接获取到处理器方法的返回结果。不过,我们可以通过在拦截器中使用 AOP 的后置通知来获取返回结果。具体实现步骤如下:
1. 定义一个返回结果的类,用于存储返回结果:
```java
public class ResultHolder {
private static final ThreadLocal<Object> holder = new ThreadLocal<>();
public static void setResult(Object result) {
holder.set(result);
}
public static Object getResult() {
Object result = holder.get();
holder.remove();
return result;
}
}
```
2. 在拦截器中使用后置通知,在方法执行完毕后将返回结果存储到 ResultHolder 中:
```java
public class MyInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
ResultHolder.setResult(handler);
}
}
```
3. 在需要获取返回结果的地方,调用 ResultHolder.getResult() 方法即可获取到返回结果:
```java
Object result = ResultHolder.getResult();
```
需要注意的是,如果拦截器链中有多个拦截器,那么需要确保拦截器的执行顺序,否则可能会导致获取到的结果不正确。
阅读全文