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

如何捕获异常@控件中的@响应状态

鄢雅畅
2023-03-14

我正在寻找一种方法来处理与前端的通信,以防响应状态(ResponseStatus)导致的错误,从而

  • 如果回复是400/401/403,我可以记录信息并发送特定消息
  • 如果响应为500,我可以记录错误并发送另一条特定消息

等等

在我们的Api网关中,我们有一个RextExceptionController@控件建议),我们在其中处理异常并将自己的DTO返回给前端。

如果我以单个异常为目标(参见下面的示例),那么一切都可以正常工作,但如果我只想以响应HTTP状态为目标,那么这显然不起作用。

@ExceptionHandler(MethodArgumentTypeMismatchException.class)
protected ResponseEntity<Object> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex) {
    ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST);
    apiError.setMessage("Bla bla Status 400");
    return buildResponseEntity(apiError);
}

@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(
  HttpMediaTypeNotSupportedException ex,
  HttpHeaders headers,
  HttpStatus status,
  WebRequest request) {
    ApiError apiError = new ApiError(HttpStatus.UNSUPPORTED_MEDIA_TYPE);
    apiError.setMessage("Bla bla Status 415");
    return buildResponseEntity(apiError);
}

这不是一种可持续的处理方式,因为来自不同团队的未来开发(应用程序基于微服务架构)可能会引发任何类型的异常,我不想在所有可能的异常之后运行,而是基于响应状态来运行处理程序。

有什么建议/想法吗?

干杯

共有1个答案

费辰阳
2023-03-14

您可以使用http处理程序拦截器在请求完成后拦截http响应,并根据您的状态执行一些操作,请查看本文https://www.baeldung.com/spring-mvc-handlerinterceptor.

 类似资料:
  • 问题内容: 我有以下代码: 我想捕获HTML响应?我该怎么做呢?我可以向form1.submit方法注册任何回调函数吗? 问题答案: 使用普通的javascript,您将无法轻松做到这一点。发布表单时,表单输入将发送到服务器,页面会刷新- 数据在服务器端处理。也就是说,该函数实际上不返回任何东西,它只是将表单数据发送到服务器。 如果您真的想用Javascript获得响应(无需刷新页面),则需要使用

  • 本文向大家介绍如何捕获 setTimeout 异常相关面试题,主要包含被问及如何捕获 setTimeout 异常时的应答技巧和注意事项,需要的朋友参考一下 No description provided.

  • 问题内容: 发现在Java 1.6(以及从Eclipse)上运行时,吞没了该方法中的异常之后,我试图找到一种捕获这些异常的方法,而不会在我的所有实现中都添加throw / catch 。 该API建议覆盖应对此有所帮助: 导致此future报告一个ExecutionException,并以给定throwable作为其原因,除非已经设置或取消了此Future。计算失败时,run方法在内部调用此方法。

  • 我在我的控制器中使用javax验证,带有。当服务器接收到无效数据时,它会抛出错误,但我想处理该错误并返回自定义格式的错误。我无法在控制器建议中捕获异常。我使用的是Spring webFlux,因此无法使用bindingResult。我如何处理该异常?这是我的代码 控制器 资源 错误处理程序

  • 我试图编写“好的”python并捕获一个S3,但没有这样的关键错误: 但是NoSuchKey没有定义,我无法跟踪到需要定义的导入。 是但是botocore.errorfactory导入的给出了一个错误,botocore.errorfactory导入的

  • 我使用的是python 2.7和tornado 4.5 以下代码不起作用:除块不被触发。我不明白为什么? 相反,我可以捕获;但是我没有我如何调用的上下文。在我的例子中,更有意义的是引发一个较低级别的异常,并且调用者根据输入将其转换为人类可读的错误。 我是否只需要重构它来调用较低级别的gen.Task?那会很烦人:/