我使用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();
}
在这里,在成功响应时,我总是得到200状态代码,即使状态代码是201或任何其他代码。
在控制器方法后面添加普通的AspectJ方面是个坏主意。Spring Web框架的其他部分可以更改Web响应,例如,结果代码可能设置有@ResponseStatus
注释。
您必须成为SpringWeb处理逻辑的一部分,例如通过注册HandlerInterceptorAdapter
。看看控制器处理后的Spring-Modify响应头,看看如何做到这一点
或者,您可以在Spring的DispatcherServlet
之前编写一个JavaEE过滤器。
您可以这样使用它:
@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());
}