我正在使用Spring AOP Aspect类记录请求和响应。
下面是我的代码
@AfterReturning(pointcut = "execution(* com.tr.dco.fp.ipam.controller..*.*(..))", returning = "retVal")
public void logAfter(JoinPoint joinPoint, Object retVal) {
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
}
在这里,如果响应成功,即使状态码是201或其他任何值,我总是会收到200个状态码。
答案 0 :(得分:0)
添加普通的AspectJ方面控制器控制器方法不是一个好主意。 Spring Web框架还有其他一些可以改变Web响应的部分,例如结果代码可能带有@ResponseStatus
注释。
您必须成为Spring Web处理逻辑的一部分,例如通过注册HandlerInterceptorAdapter
。看看Spring - Modify response headers after controller processing来了解如何做。
或者,您可以在Spring的DispatcherServlet
之前编写JavaEE过滤器。
答案 1 :(得分:0)
您可以通过以下方式使用它:
@AfterReturning(pointcut = "execution(* com.tr.dco.fp.ipam.controller..*.*(..))", returning = "result")
public void afterReturning(final JoinPoint joinPoint, final ResponseEntity<?> result) {
data.put("status_code", result.getStatusCodeValue());
}