【问题标题】:Spring alert mail system for Null pointer exception空指针异常的Spring警报邮件系统
【发布时间】:2019-06-06 01:18:59
【问题描述】:

我正在为我的项目中创建的 Null 指针异常或任何其他未经检查的异常寻找 Spring 警报邮件系统,以便我可以在应用程序中出现问题的警报。目前我正在使用弹簧靴。我还希望通过邮件发送 Request Json,这样我就可以分析 Request JSON 是否有一些可能导致错误的数据。

最初我在考虑使用@RestControllerAdvice for @ExceptionHandler(value = Exception.class) 和调用JavaMailSender.send() 的实例,但问题是该方法(比如handleOtherException(Exception ex))将只接受Exception ex 作为参数并且我还希望将传入的请求添加到邮件。

我尝试添加如下所示的一个参数:

protected ResponseEntity<Object> handleOtherException(Exception ex,@RequestBody Student s1)

但我得到以下错误:

java.lang.IllegalStateException: Could not resolve method parameter at index 1 in protected org.springframework.http.ResponseEntity<java.lang.Object> com.example.demo.GlobalExceptionHandler.handleOtherException(java.lang.Exception,com.example.demo.Student) throws com.fasterxml.jackson.core.JsonProcessingException: No suitable resolver for argument 1 of type 'com.example.demo.Student'

我也尝试在 github 中查找,但找不到任何这样的东西。请提出解决此问题的任何代码或方法。

【问题讨论】:

    标签: spring spring-boot email exception


    【解决方案1】:

    结合使用 ExceptionWrapping 的概念和Exception Handler。 因此,您可以定义一个让我们说ResponseException - 包装实际异常并存储附加信息(如原始请求或更多用户特定的错误消息)的对象。 在 Exception-Controller 中,您可以将此包装的异常发送回客户端。 优点是您只需要编写一个用于异常处理的接口。包装在服务器端完成,客户端根据其特定属性访问/处理收到的异常。

    你说得差不多了,服务器端必须有一个额外的方法从捕获的异常中生成响应对象。 例如,在客户端站点上,您可以使用访问者模式来处理不同类型的异常。

    【讨论】:

    • 抱歉这么晚才回复,要在ResponseException中添加Response,我们必须在try catch中捕获NPE。由于未检查 NPE,你永远不知道它会发生在哪里,所以我应该在哪里放置 try catch。我的项目非常大,有很多服务。
    • 我正在考虑在@RestControllerAdvice 中创建一个响应和自动装配的bean
    【解决方案2】:

    除了 Panzerkroete 的回答之外,您还应该添加自己定制的 ExceptionHandler 就像下面

    @ControllerAdvice
    public class ExceptionHandler {
    
        @ExceptionHandler
        @ResponseStatus(HttpStatus.BAD_REQUEST)
        @ResponseBody
        public CustomResponse handle(BadRequestException badRequest) {
            return getResponse(badRequest);     
        }
    
        public CustomResponse getResponse(Exception exception) {
            CustomResponse customResponse = new CustomResponse(exception.getMessage());
            //Call Mail Api with customResponse Object
            return customResponse;
        }
    }
    

    添加将包含错误详细信息的 CustomResponse 类

    添加将扩展 RuntimeException 的自定义 BadRequestException

    现在你只需要抛出空指针任何其他未经检查的异常(在上述情况下抛出 BadRequestException),这将反过来调用 ExceptionHandler

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2016-09-17
      • 2018-10-01
      • 2019-02-06
      • 2012-07-07
      相关资源
      最近更新 更多