HTTP状态代码总是从HttpServlet响应返回200



我使用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());
}

最新更新