当前位置: 首页 > 知识库问答 >
问题:

全局错误处理程序和过滤器的Spring变换顺序

裴畅
2023-03-14
@Component
@Order(8)
public class LogReqFilter extends OncePerRequestFilter
{
@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException 
{...}
}

it basically logs all requests and responses. When there is a 400 error however the response is blank. There is a global exception handler that replaces the body with the custom error:

@RestControllerAdvice
public class GlobalExceptHandler extends ResponseEntityExceptionHandler {
    @Override
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    protected ResponseEntity<Object> handleArgNotValid(MethodArgumentNotValidException ex
            , HttpHeaders headers, HttpStatus status, WebRequest request) {...}
}

共有1个答案

上官波鸿
2023-03-14

编辑:

不,您不能根据OP标题更改顺序,因为您的GlobalError处理程序始终位于保存ControllerAdvises的层中,并且始终位于RequestFilter层和Controller层之间。

你说得有点对。

    null
    null
  1. “入站”-来自请求筛选器的方法
  2. “入站”-来自控制器建议的方法
  3. “出站”-来自控制器通知的方法
  4. “出站”-来自请求筛选器的方法

现在,handleargNotvalid()只在引发此类异常并可能将内容添加到响应输出流的情况下调用。您的示例没有显示您是否在这里返回对象,但我猜从您的操作来看,您没有。结果输出流为空。

Plz还请注意,除非包装输出流,否则没有简单的方法转储/查看输出流,但这是另一个主题。

 类似资料:
  • 问题内容: 当我的网站是100%jQuery时,我曾经这样做: 为401错误设置全局处理程序。现在,我将angularjs与和一起使用,以向服务器发送(REST)请求。有什么办法可以类似地用角度设置全局错误处理程序吗? 问题答案: 我还在建立一个带有angular的网站,并且遇到了同样的障碍来处理全局401。当我遇到此博客文章时,我最终使用了HTTP拦截器。也许您会发现它和我一样有用。 “基于An

  • 问题内容: 有没有一种方法可以添加一个全局包罗万象的错误处理程序,可以在其中将响应更改为通用JSON响应? 我无法使用该信号,因为它不允许修改响应(http://flask.pocoo.org/docs/0.10/signals/)。 相反,所有信号处理程序均以未定义的顺序执行,并且不修改任何数据。 我宁愿不要包装该函数,因为感觉就像是内部API。我想我正在寻找类似的东西: 请注意,不会接受任何参

  • 我正在使用Apollo与用React编写的Web应用程序中的GraphQL服务器进行交互。我试图在应用程序中实现错误处理,并依赖于apollo-link-error。 现在,我需要处理两类错误: 可以在执行Apollo查询或变异的组件中本地处理的错误,即需要在其上显示上下文错误信息的无效表单字段 可以全局处理的错误,例如,通过在页面的某个位置显示toast通知来显示错误详细信息 显然,一旦错误在本

  • 如何在Spring启动中指定过滤器的顺序?我需要在Spring Security过滤器之后插入我的MDC过滤器。我几乎尝试了一切,但我的过滤器总是第一位的。这不起作用: 这也不管用:

  • 我使用spring-boot-starter-amqp1.4.2.Producer和消费者工作正常,但有时传入的JSON消息语法不正确。这会导致以下(正确)异常: 未来我可能会面临更多的例外。因此,我想配置一个全局错误处理程序,这样,如果任何一个消费者中存在任何异常,我就可以全局处理它。 注意:在这种情况下,消息根本没有到达消费者。我想在消费者中全局处理这类异常。 请找到以下代码: RabbitC

  • 我正在用Spring4.0.4和Spring Boot1.0.2编写一个web应用程序,使用Tomcat作为嵌入式web容器,我想实现一个全局异常处理,以截取所有异常并以特定的方式记录它们。我的简单要求是: 我想全局处理所有尚未在其他地方处理的异常(例如,在控制器异常处理程序中)。我要记录该消息,并向用户显示自定义错误消息。 我不希望Spring或web容器自己记录任何错误,因为我希望自己记录错误