HTTP状态代码始终从HttpServletResponse返回200

时间:2018-10-30 10:23:32

标签: java spring-boot

我正在使用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个状态码。

2 个答案:

答案 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());
  }